[問題] 關於3des加解密問題

看板MacDev作者時間13年前 (2012/07/10 15:18), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/2 (看更多)
有點鬱悶,改了一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

07/10 20:58, , 1F
iv是nil的情形下,會被設成什麼值呢?會每次都不一樣嗎?
07/10 20:58, 1F

07/10 20:59, , 2F
加解密key和iv要一致。
07/10 20:59, 2F

07/11 09:56, , 3F
因為ECB好像不用給vector 我剛試過加上固定值vector還是一樣
07/11 09:56, 3F

07/11 09:58, , 4F
key是確定都一樣的~
07/11 09:58, 4F

07/13 07:45, , 5F
那我就真的猜不出原因是什麼了 XDD 等你解掉後再聽你分享吧
07/13 07:45, 5F

07/13 09:59, , 6F
應該是因為key只給了16byte(這是廠商給的),3des要24byte
07/13 09:59, 6F

07/13 10:00, , 7F
所以可能不足的就被亂填充了 造成我的結果有時候對有時候錯
07/13 10:00, 7F
文章代碼(AID): #1F-zSjwV (MacDev)
文章代碼(AID): #1F-zSjwV (MacDev)