【发布时间】:2015-08-21 12:17:03
【问题描述】:
我是加密新手
问题:
我得到了一组加密字符串,我需要将它们解密以显示给移动客户端用户。对于android,它解密很好,我正在使用以下方法“解密”。对于 iOS,我在将此 java 方法转换为 Objective C 时遇到了很多麻烦。我尝试使用 NSData+CommonCrypto、RNCryptor。两者都会返回一些解密后的数据,但是将解密后的数据转换为字符串时,总是nil。
目标:
将java解密方法翻译成Objective C(使用密钥解密Objective C中的字符串)
任何建议、cmets、意见、伪代码将不胜感激。谢谢
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;
}
}
【问题讨论】:
-
您需要提供示例输入和输出以及模式、填充类型(如果有)和 iv(如果有 CBC 模式和任何)。将这些输入的十六进制副本添加到问题中。如果其中一些是未知的,还提供加密库的链接。许多加密库都有内部默认值,而且许多也不提供有关这些的信息。
-
Java
getInstance方法应该提供所有必要的信息,而不是依赖默认值。例如:“AES/CBC/PKCS5Padding (128)”、“AES/ECB/NoPadding (128)”或其他组合。使用“AES”规范,我猜想:ECB 模式(非常糟糕的选择)、PKCS5Padding 以及根据需要填充的基于提供的密钥空值的密钥长度。请参阅Class Cipher docs。 -
用您的 Objective-C 代码更新您的问题,以便人们指出您的问题。
-
@zaph 你的第二条评论解决了我的问题。 “AES/CBC/PKCS5Padding (128)”。谢谢^^。
标签: objective-c encryption cryptography commoncrypto rncryptor