在 Objective C 中解密 AES
Decrypting AES in Objective C
我是加密新手
问题:
我得到了一组加密字符串,我需要将它们解密以显示给移动客户端用户。对于 android,它解密很好,我正在使用以下方法 "decrypt"。对于 iOS,我在将此 java 方法转换为 Objective C 时遇到了很多麻烦。我曾尝试使用 NSData+CommonCrypto、RNCryptor。两者都会return一些解密数据,但是当解密数据转换为字符串时,它总是nil。
目标:
Translate the java decrypt method to Objective C(Decrypt a string in Objective C using a secret key)
任何建议、评论、意见、伪代码将不胜感激。谢谢
Android解密方法
public static String decrypt(String message){
try {
Cipher c = Cipher.getInstance("AES");
SecretKeySpec key = new SecretKeySpec(secrKey.getBytes(), "AES");
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = Base64.decode(message.getBytes(), Base64.DEFAULT);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
String decoded = new String(Base64.decode(decryptedValue, Base64.DEFAULT));
return decoded;
}catch(Exception e){
return null;
}
}
Java getInstance 方法应该提供所有必要的信息,而不是依赖默认值。例如:"AES/CBC/PKCS5Padding (128)"、"AES/ECB/NoPadding (128)" 或其他一些组合。
根据 "AES" 规范,我猜测:ECB 模式(非常糟糕的选择)、PKCS5Padding 和基于提供的密钥的密钥长度,根据需要进行空填充。
参见 Class Cipher 文档。
我是加密新手
问题:
我得到了一组加密字符串,我需要将它们解密以显示给移动客户端用户。对于 android,它解密很好,我正在使用以下方法 "decrypt"。对于 iOS,我在将此 java 方法转换为 Objective C 时遇到了很多麻烦。我曾尝试使用 NSData+CommonCrypto、RNCryptor。两者都会return一些解密数据,但是当解密数据转换为字符串时,它总是nil。
目标:
Translate the java decrypt method to Objective C(Decrypt a string in Objective C using a secret key)
任何建议、评论、意见、伪代码将不胜感激。谢谢
Android解密方法
public static String decrypt(String message){
try {
Cipher c = Cipher.getInstance("AES");
SecretKeySpec key = new SecretKeySpec(secrKey.getBytes(), "AES");
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = Base64.decode(message.getBytes(), Base64.DEFAULT);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
String decoded = new String(Base64.decode(decryptedValue, Base64.DEFAULT));
return decoded;
}catch(Exception e){
return null;
}
}
Java getInstance 方法应该提供所有必要的信息,而不是依赖默认值。例如:"AES/CBC/PKCS5Padding (128)"、"AES/ECB/NoPadding (128)" 或其他一些组合。
根据 "AES" 规范,我猜测:ECB 模式(非常糟糕的选择)、PKCS5Padding 和基于提供的密钥的密钥长度,根据需要进行空填充。
参见 Class Cipher 文档。