首页 > 解决方案 > 将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
        }

标签: javaiosswiftencryption

解决方案


推荐阅读