我必须在目标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作为输出,让我知道这段代码有什么问题。
答案 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