java - 将java代码转换为swift以进行AES解密
问题描述
我在使用 ECB 算法将 Java 代码转换为 Swift 以进行 AES 解密时遇到问题。我有一个来自服务器的加密字符串,必须用密钥解密。
这是Java代码:
public String decrypt(String encryptText,String panKey) throws Exception {
byte[] saltBytes = salt.getBytes("UTF-8");
byte[] res = null;
byte[] encryptTextBytes = new Base64().decode((Convertor.hex2Alpha(encryptText)).getBytes("UTF-8"));
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
PBEKeySpec spec = new PBEKeySpec(panKey.toCharArray(), saltBytes, this.pwdIterations, this.keySize);
SecretKey secretKey = skf.generateSecret(spec);
SecretKeySpec key = new SecretKeySpec(secretKey.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
try{
res=cipher.doFinal(encryptTextBytes);
}catch(BadPaddingException e){e.printStackTrace();}
return new String(res);
}
我的快速代码:
func decryptArtisan(cryptedMessage: String , key:String) -> String? {
var clairMessage:String? = nil;
if let cryptedData = Data(base64Encoded: cryptedMessage) {
do {
let aes = try AES(key: Array<UInt8>(key.utf8), blockMode: ECB(), padding: .pkcs5) // aes128
let cipher = try aes.decrypt(Array<UInt8>(cryptedData))
clairMessage = String(bytes: cipher, encoding: .utf8)
}catch{
let error = error as NSError
print(error)
}
}
return clairMessage
}
解决方案
推荐阅读
- android - Android Studio,缺少 Gradle 设置
- c# - 为什么我的 azure 函数有时无法读取静态配置变量?
- android - 意外行为改造 + 协程
- angular - 传单 GeoJSON 类型不与 GeoJSON 对象关联
- r - 按数据框中的因子列着色行 - R
- sql-server - 对于源和目标中为 FLOAT 的字段,我应该在 Informatica 中保留什么数据类型?
- tableau-api - 如何在 Tableau 中添加缺少的记录数?
- r - 以宽格式转换具有多个变量的数据,并为每个组提供标题
- html - 为什么 Bootstrap 模态接收焦点在选项卡上?
- azure-api-management - 关于带有 Apim 和 MSI 的示例 Azure 存储 Blob CRUD