【问题标题】:DES Decryption issue for objective c目标 c 的 DES 解密问题
【发布时间】:2014-08-04 22:38:04
【问题描述】:

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

我将输入作为

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 作为输出,让我知道这段代码有什么问题。

【问题讨论】:

  • 您的代码使用的是 0D090C04040F060D020507090205050E 而不是 D9C44F6D2589255E。我猜这是问题之一?
  • 你的猜测是正确的谢谢你..现在我得到了解决方案

标签: ios objective-c encryption des


【解决方案1】:

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

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

【讨论】:

  • 超过 2 天找不到解决方案..但你做到了。非常感谢您的及时帮助
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 2021-08-09
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
相关资源
最近更新 更多