小编Sim*_*Lee的帖子

iPhone(Objective-c)和Java之间的AES差异

我整天都在试着解决这个问题......

我有一个在iPhone上运行的objective-c客户端,连接到Java服务器.iPhone正在使用AES加密数据,但我无法在服务器上解密它.我正在使用已知的密码短语和消息(单个字符串)并在iPhone上生成字节数组,使用相同的密钥和消息在Java服务器上生成比较字节数组但字节数组完全不同(因此不能在Java端解码).

客户端正在使用具有以下设置的CommonCrypto库...

数据是NSData使用dataUsingEncoding:NSASCIIStringEncoding Key 保持单词"message" 是NSData使用上述编码再次保持短语"1234567891123456".算法是kCCAlgorithmAES128 选项kCCOptionsPKCS7Padding(我相信它等同于服务器上的ECB?!)

服务器正在使用以下代码...

byte[] key = "1234567891123456".getBytes();
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");

SecretKeySpec k =  new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal("message".getBytes());
Run Code Online (Sandbox Code Playgroud)

但是encryptedData中的数据与在objective-c代码中生成的数据不匹配,字节数组完全不同.

任何人都可以看到任何明显我做错了吗?我认为设置都是一样的...... :(

  • 更新 - 根据要求....

好的,所以这里......

iPhone客户端正在加密以下字符串"消息"它使用密钥"1234567891123456"它使用初始化矢量"1010101010101010"它使用AES128,具有CBC模式(据我所知)和kCCOptionsPKCS7Padding的选项.

加密结果(使用base64编码)是UHIYllDFAXl81ZM7OZPAuA ==

服务器正在使用相同的密钥和初始化向量加密相同的字符串.它使用以下Cipher.getInstance("AES/CBC/PKCS5Padding");

加密的结果(使用base64编码)是ALBnFIHysLbvAxjvtNo9vQ ==

谢谢.

  • 更新2 - 按要求......

这是iPhone代码....

NSData *toencrypt = [@"message" dataUsingEncoding:NSASCIIStringEncoding];

NSData *pass = [@"1234567891123456" dataUsingEncoding:NSASCIIStringEncoding];

NSData *iv = [@"1010101010101010" dataUsingEncoding:NSASCIIStringEncoding];    

CCCryptorStatus status = kCCSuccess;

NSData *encrypted = [toencrypt …
Run Code Online (Sandbox Code Playgroud)

java encryption aes objective-c

16
推荐指数
1
解决办法
1万
查看次数

标签 统计

aes ×1

encryption ×1

java ×1

objective-c ×1