Я использую CommonCrypto в своем приложении для расшифровки некоторых данных, зашифрованных с помощью openssl.Чтобы проверить шифрование, я попытался зашифровать некоторые примеры данных, и довольно удивительно, что выходные данные моего шифрования (то есть aes ecb) отличаются от того, что генерируется с помощью команды openssl.
IЯ также провел несколько попыток с другими фреймворками, такими как CryptoSwift, но результаты те же.
Вот код, который я использую для шифрования:
class AESEncryptor {
static func encrypt(text: String, key: String) -> String? {
guard let encryptingData = text.data(using: .utf8), let keyData = key.data(using: .utf8) else {
return nil
}
var outLength = Int(0)
var outBytes = [UInt8](repeating: 0, count: encryptingData.count + kCCBlockSizeAES128)
var status: CCCryptorStatus = CCCryptorStatus(kCCSuccess)
encryptingData.withUnsafeBytes { (encryptingBytes: UnsafePointer<UInt8>!) -> () in
keyData.withUnsafeBytes { (keyBytes: UnsafePointer<UInt8>!) -> () in
status = CCCrypt(CCOperation(kCCEncrypt),
CCAlgorithm(kCCAlgorithmAES), // algorithm
CCOptions(kCCOptionECBMode | kCCOptionPKCS7Padding), // options
keyBytes, // key
keyData.count, // keylength
nil, //ivBytes, // iv
encryptingBytes, // dataIn
encryptingData.count, // dataInLength
&outBytes, // dataOut
outBytes.count, // dataOutAvailable
&outLength) // dataOutMoved
}
}
guard status == kCCSuccess else {
return nil
}
let encryptedData = Data(bytes: UnsafePointer<UInt8>(outBytes), count: outLength)
return encryptedData.base64EncodedString()
}
}
Вызов вышеуказанной функции:
let key = "4f0fbad47141ef9616ce4d71b459eea9"
let plain = "ThisIsASuperSecurePassword"
let digest = AESEncryptor.encrypt(text: plain, key: key)
дайджеста является "4ebhUO + Rma34MR4iBTT04AS6rXX + Jy2U97rwC2HGmz0 ="
Между тем, в командной строке OpenSSL, с таким же ввода:
echo -n "ThisIsASuperSecurePassword" | openssl enc -e -aes-128-ecb -K "3466306662616434373134316566393631366365346437316234353965656139" -a
( "3466306662616434373134316566393631366365346437316234353965656139" является шестнадцатеричная строкаиз "4f0fbad47141ef9616ce4d71b459eea9")
дает мне "zPO4jNrMbbZp4WXNPgkX1RuBIpNXZqe0XNqNMFPTt / Q ="
Итак, это не один и тот же вопрос: почему?Как я могу получить те же выходы?
AD