2017-07-11 151 views
-3

下面是我的android java代碼,實際上如何在IOS Swift3中寫這個?IOS Swift3 DES,ECB,Padding Encryption

final SecretKey key = new SecretKeySpec(keyBytes, "DESede"); 

final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); 

cipher.init(Cipher.ENCRYPT_MODE, key); 

final byte[] cipherText = cipher.doFinal(plainTextBytes); 
+0

3DES-ECB(DESede是3DES)真的不安全,特別是2鍵3DES。如果可能,隨機更新AES-CBC IV。 – zaph

回答

0

在SO上查找AES或DES Common Crypto示例,並根據需要對3DES進行更改。確保密鑰是24字節。

變化:

  • 算法:CCAlgorithm3DES
  • 模式:kCCModeECB
  • 選項:ccPKCS7Padding

如果密鑰爲16個字節它是兩個密鑰3DES,複製和追加第一個8字節到結尾的密鑰創建一個24字節的密鑰。

注:DESede稱爲3DES或Tripple-DES。

3DES真的不安全,特別是2鍵3DES。如果可能,隨機更新AES-CBC IV。

這是未經測試的斯威夫特3碼(也應與Swift4工作),注意關於上面的密鑰長度的警告:

func trippleDESCrypt(data:Data, keyData:Data, ivData:Data, operation:Int) -> Data? { 
    let cryptLength = size_t(data.count + kCCBlockSize3DES) 
    var cryptData = Data(repeating:0, count:cryptLength) 
    var numBytesEncrypted :size_t = 0 

    let keyLength    = keyData.count 
    let algoritm: CCAlgorithm = UInt32(kCCAlgorithm3DES) 
    let options: CCOptions = UInt32(kCCOptionPKCS7Padding | kCCModeECB) 

    let cryptStatus = cryptData.withUnsafeMutableBytes {cryptBytes in 
     data.withUnsafeBytes {dataBytes in 
      ivData.withUnsafeBytes {ivBytes in 
       keyData.withUnsafeBytes {keyBytes in 
        CCCrypt(CCOperation(operation), 
          algoritm, 
          options, 
          keyBytes, keyLength, 
          ivBytes, 
          dataBytes, data.count, 
          cryptBytes, cryptLength, 
          &numBytesEncrypted) 
       } 
      } 
     } 
    } 

    if UInt32(cryptStatus) == UInt32(kCCSuccess) { 
     cryptData.count = numBytesEncrypted 
    } 
    else { 
     print("Error: \(cryptStatus)") 
     return nil 
    } 

    return cryptData 
} 

像往常一樣,你需要有一個包含導入橋接頭文件:

#import <CommonCrypto/CommonCrypto.h> 

,你需要包括框架:

Security.framework. 
+0

真的很好的答案!最後我得到正確的加密值! 但我將「kCCModeECB」更改爲「kCCOptionECBMode」。 – jj591