在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.
3DES-ECB(DESede是3DES)真的不安全,特別是2鍵3DES。如果可能,隨機更新AES-CBC IV。 – zaph