作者dm33 ()
看板MacDev
标题[问题] 关於3des加解密问题
时间Tue Jul 10 15:18:03 2012
有点郁闷,改了一3des-ecb加解密,结果加解密每次执行结果会不一样
有时候加解密就对了,有时候就错了,
是原本就为如此,还是我哪儿有问题呢,有谁知道吗?
以下程式码....
+(NSData *) TriDesEncode:(NSData*)data key:(NSData*)key
encryptOrDecrypt:(CCOperation)encryptOrDecrypt
{
NSLog(@"Data:%@",data);
NSLog(@"key:%@",key);
const void *vplainText = [data bytes];
size_t plainTextBufferSize = [data length];
vplainText = (const void *) [data bytes];
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) &
~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
const void *vkey = (const void *) [key bytes];
ccStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithm3DES,
kCCOptionECBMode,
vkey, //"123456789012345678901234", //key
kCCKeySize3DES,
nil, //"init Vec", //iv,
vplainText, //"Your Name", //plainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSData *result = [NSData dataWithBytes:(const void *)bufferPtr
length:(NSUInteger)movedBytes];
return result;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 42.67.175.14
1F:推 aecho:iv是nil的情形下,会被设成什麽值呢?会每次都不一样吗? 07/10 20:58
2F:→ aecho:加解密key和iv要一致。 07/10 20:59
3F:→ dm33:因为ECB好像不用给vector 我刚试过加上固定值vector还是一样 07/11 09:56
4F:→ dm33:key是确定都一样的~ 07/11 09:58
5F:推 aecho:那我就真的猜不出原因是什麽了 XDD 等你解掉後再听你分享吧 07/13 07:45
6F:→ dm33:应该是因为key只给了16byte(这是厂商给的),3des要24byte 07/13 09:59
7F:→ dm33:所以可能不足的就被乱填充了 造成我的结果有时候对有时候错 07/13 10:00