【发布时间】:2026-02-06 02:30:01
【问题描述】:
Android 代码:
私有静态最终字符串 ALGORITHM = "AES/ECB/PKCS5Padding";
private static final String KEY = "SixteenCharacter";
加密:
private static byte[] encrypt(final byte[] key, final byte[] originalData) {
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec skeySpec = new SecretKeySpec(key, ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(originalData);
return encrypted;
} catch (Exception ex) {
ex.printStackTrace();
return new byte[0];
}
}
解密:
private static byte[] decrypt(final byte[] key, final byte[] encryptedData) {
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec skeySpec = new SecretKeySpec(key, ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] original = cipher.doFinal(encryptedData);
return original;
} catch (Exception ex) {
ex.printStackTrace();
return new byte[0];
}
}
iOS 代码:
静态让 KEY = "SixteenCharacter"
私有静态 let iv: Array = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
加密:
static func getEncryptedString(normal: String?, key: String, options: Int = kCCOptionPKCS7Padding) -> String {
guard let normal = normal else { return "" }
if let keyData = key.data(using: String.Encoding.utf8),
let data = normal.data(using: String.Encoding.utf8),
let cryptData = NSMutableData(length: Int((data.count)) + kCCBlockSizeAES128) {
let keyLength = size_t(kCCKeySizeAES128)
let operation: CCOperation = UInt32(kCCEncrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(options)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
(keyData as NSData).bytes, keyLength,
iv,
(data as NSData).bytes, data.count,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
var base64cryptString = cryptData.base64EncodedString(options: .lineLength76Characters)
//base64cryptString = base64cryptString.replacingOccurrences(of: "/", with: "_")
.replacingOccurrences(of: "+", with: "-")
return base64cryptString
}
else {
return normal
}
}
return normal
}
解密:
static func getDecryptedString(normal: String?, key: String, options: Int = kCCOptionPKCS7Padding) -> String {
guard var normal = normal else { return "" }
//normal = normal.replacingOccurrences(of: "_", with: "/").replacingOccurrences(of: "-", with: "+")
if let keyData = key.data(using: .utf8),
let data = NSData(base64Encoded: normal, options: .ignoreUnknownCharacters),
let cryptData = NSMutableData(length: Int((data.length)) + kCCBlockSizeAES128) {
let keyLength = size_t(kCCKeySizeAES128)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(options)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
(keyData as NSData).bytes, keyLength,
iv,
data.bytes, data.length,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
let unencryptedMessage = String(data: cryptData as Data, encoding:String.Encoding.utf8)
if let unencryptedMessage = unencryptedMessage, !unencryptedMessage.isEmpty {
return unencryptedMessage
}
}
else {
return normal
}
}
return normal
}
由于我之前没有使用过 AES 加密,我不知道我哪里出错了 我在互联网上看到了很多解决方案,但还没有运气
Android 代码已经完成,我唯一的办法就是修改 iOS 代码!
提前致谢!
【问题讨论】:
标签: android ios swift encryption