目标c的DES解密问题

时间:2014-08-04 05:15:37

标签: ios objective-c encryption des

我必须在目标C中解密数据。解密方案是DES / ECB / NoPadding,后面的输入数据= 741DCDDF1C216EEF,密钥= D9C44F6D2589255E,输出应该是34160D6EADAD6D86,下面的代码输出为aec6f702 5b4619e1 064db829 925a10d7 < / p>

我正在传递输入

uint8_t ksn10[16] = { 0x0D, 0x09, 0x0C, 0x04, 0x04, 0x0F, 0x06, 0x0D,
    0x02, 0x05, 0x08, 0x09, 0x02, 0x05, 0x05, 0x0E};
uint8_t bytes32[16] = { 0x07, 0x04, 0x01, 0x0D, 0x0C, 0x0D, 0x0D, 0x0F,
    0x01, 0x0C, 0x02, 0x01, 0x06, 0x0E, 0x0E, 0x0F};

NSData *TMKKey = [NSData dataWithBytes:ksn10 length:16];
NSData *SessionKey = [NSData dataWithBytes:bytes32 length:16];

方法定义:

NSData *encoded_data=  [self DESCrypto:(NSData*)TMKKey:(NSData*)SessionKey:kCCDecrypt:     [SessionKey length]:kCCAlgorithmDES:kCCKeySizeDES:kCCOptionECBMode|0x0000];

NSLog(@"%@", encoded_data);

方法调用:

-(NSData*)DESCrypto :(NSData *)key :(NSData*)dataIn :(CCOperation)CryptOperation :(int)inlength :(CCAlgorithm)type :(size_t)keysize :(CCOptions)mode

{

char dataOut[16000];
bzero(dataOut, sizeof(dataOut));
size_t numBytesEncryptedorDecrypted=0;
char iv[8]={0};
CCCryptorStatus result =CCCrypt(CryptOperation,type,mode,[key bytes],keysize,iv,[dataIn bytes],inlength, dataOut, sizeof(dataOut), &numBytesEncryptedorDecrypted);

NSLog(@"CryptoStatus:%d",result);



NSData *data=[[NSData alloc]initWithBytes:dataOut length:numBytesEncryptedorDecrypted];

return data;

}

但是没有得到正确的输出。请帮我把34160D6EADAD6D86作为输出,让我知道这段代码有什么问题。

1 个答案:

答案 0 :(得分:0)

将数据和密钥更改为正确的十六进制表示,解密确实产生正确的值:

input data: 741DCDDF1C216EEF
key:        D9C44F6D2589255E
output:     34160D6EADAD6D86 

测试(没有错误检查,假设所有输入都正确):

uint8_t dataInBytes[8] = { 0x74, 0x1D, 0xCD, 0xDF, 0x1C, 0x21, 0x6E, 0xEF };
int dataLength = 8;
uint8_t keyBytes[8] = { 0xD9, 0xC4, 0x4F, 0x6D, 0x25, 0x89, 0x25, 0x5E };
uint8_t *dataOutBytes = calloc(1, dataLength);

CCCrypt(kCCDecrypt,
        kCCAlgorithmDES, kCCOptionECBMode,
        keyBytes, kCCKeySizeDES,
        NULL,
        dataInBytes,  dataLength,
        dataOutBytes, dataLength,
        NULL);

NSString *s = @"dataOutBytes: ";
for (int i=0; i<8; i++) {s = [s stringByAppendingFormat:@"%02X", dataOutBytes[i]];}
NSLog(@"%@", s);

输出:

dataOutBytes: 34160D6EADAD6D86
相关问题