【发布时间】:2021-01-15 03:02:03
【问题描述】:
我正在使用 Swift 进行 AES 加密。
public static String encrypt1(String plaintext, String key, String IV) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(IV.getBytes("UTF-8")));
byte[] ciphertext = cipher.doFinal(plaintext.getBytes("UTF-8"));
byte[] iv = cipher.getIV();
String asd = Base64.encodeToString(ciphertext, Base64.NO_WRAP);
return asd;
}
我没有找到适用于 iOS 13 及更低版本的 AES CBC PKCS5Padding 加密。 iOS 13 有 CryptoKit,这不是我需要的。
我尝试过的 Swift 转换: //这里的操作是kCCEncrypt的默认值0
public func encrypt1(plainText : String, key: String, iv : String, operation : Int) -> String {
let data = Data(plainText.utf8)
let ivData = Data(iv.utf8)
let keyData = Data(key.utf8)
let cryptLength = size_t(data.count + kCCBlockSizeAES128)
var cryptData = Data(count:cryptLength)
let keyLength = size_t(kCCKeySizeAES128)
let options = CCOptions(kCCOptionPKCS7Padding)
var numBytesEncrypted :size_t = 0
let cryptStatus = cryptData.withUnsafeMutableBytes {cryptBytes in
data.withUnsafeBytes {dataBytes in
ivData.withUnsafeBytes {ivBytes in
keyData.withUnsafeBytes {keyBytes in
CCCrypt(CCOperation(operation), CCAlgorithm(kCCAlgorithmAES), options, keyBytes, keyLength, ivBytes, dataBytes, data.count,cryptBytes, cryptLength,&numBytesEncrypted)
}
}
}
}
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.removeSubrange(numBytesEncrypted..<cryptData.count)
} else {
print("Error: \(cryptStatus)")
}
print("My Encrypted Value: \(String(decoding: cryptData, as: UTF8.self))")
return String(decoding: cryptData, as: UTF8.self);
}
我从 swift 输出中得到的是
�4��ɚ�-���.�'��kZU����Xm�E��X��S��^������I�WW�>a�bo)K�� ��pS��=�>��he�-�}ͮQrqZha�d�i�� 我不明白我在做什么错误我遵循了 AES 加密算法,但我仍然得到垃圾输出。请帮忙!!! *U�����y���a�m0H������.)˶X�#t�6�C��w5@����Q����V�.w�!��� qyjH$S C�,�u��ܻ��L�ȧ�����_V�ym�R~RG���\o�S& kdx|�m�L��x�t� �d��<�� _���,/��ͺ9�=��X.��а��ft�3�Ф�G�V�QH=?����:jc� ��Ԫ��������[��
!�ϝ5}��V�PA
��
【问题讨论】:
-
到目前为止你尝试了什么?
-
Stack Overflow 是一个问答网站,而不是免费的代码转换服务。
标签: java ios swift encryption aes