参考的安卓端解密的代码写的,但安卓端解密没问题,我写的一直解不出来。
安卓解密代码如下:
java
byte[] keyBy = key.getBytes("utf-8");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
SecretKeySpec keyspec = new SecretKeySpec(keyBy, "AES");
cipher.init(Cipher.DECRYPT_MODE, keyspec);
return cipher.doFinal(toDecrypt);
我写的 Objective-C 代码:
```ObjC
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCKeySizeAES128, NULL, [data bytes], dataLength, buffer, bufferSize, &numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted freeWhenDone:YES];
}
free(buffer);
return nil;
```
PKCS7Padding 、 ECB 、密钥都一致,但解出来的东西不一样,我把 128 、 192 、 256 这三种密钥长度也都试了一遍也不行,求大神指点一下还可能是什么地方的问题?
1
kenneth 2016-01-18 17:02:40 +08:00
可以换个语言来解解,看看算法是否正确。
|
2
suchj 2016-01-18 17:25:53 +08:00
这种问题可以这样解决:
在参考语言的版本里打印每一步的中间结果,然后在你所的的语言里也把第一步的中间结果打印出来,对比就知道最早出错的是在哪一步,逐步向下,就能写出新语言的版本。 |
3
yzimhao 2016-01-18 17:39:22 +08:00
可以试试 这个在线加解密工具
http://www.kjson.com/encrypt/enc/ |
4
Codist 2016-01-18 17:46:38 +08:00
之前遇到过一次, php 较低版本对于长度不足的密钥和初始向量会在其后补齐 '\0' 使其达到有效长度, java 应该是截取有效长度,密钥碰巧又多了一个字符,调了半天才发现
|
5
janxin 2016-01-18 19:11:47 +08:00
找一个第三方工具,快速加密解密结果确认问题出在哪一边
|
6
anerevol 2016-01-18 19:23:29 +08:00
|
7
scfhao OP 更新:
1 )找到个不错的在线加解密工具: http://www.seacha.com/tools/aes.html 2 )问题中的 iOS 代码和安卓代码都可以正确解密到原文本,但 iOS 的代码无法从加密过的二进制文件中解密文本(安卓代码却可以),这有可能是哪里的问题? |
8
xuzhongzhou 2016-01-21 16:48:57 +08:00
@scfhao 楼主看看二进制文件是加密后的,还是 base64 编码过的。
iOS 的代码粗看看不出什么问题。自己试过后端加密后的数据解不出来,有的人习惯加密后的数据以 base64 encode 的字符串返回,有的是直接以十六进制的字符串返回。 |
9
scfhao OP @xuzhongzhou 直接从服务器下载的数据文件(不是字符串形式),安卓端也没有 base64 编码转换的过程,我也试过用 base64 转换。
|
10
scfhao OP |
11
iOran 2016-01-22 23:32:20 +08:00
V 站设置不能删帖,还是有他的道理的。
|