2011-02-09 15 views
0

生成OpenSSL的3DES解密密钥时间表需要解密的一些数据已经3DES系统上运行的编码单(C#)我如何在iphone

我需要使用OpenSSL和解密在iPhone上。

我发现它看起来像这样的例子,它没有错误,当我安装了OpenSSL等运行在iPhone,但产生错误的结果对于我已经在编码系统上验证我的测试案例。初始化向量是正确的,但是我应该如何设置关键时间表,因为我拥有的唯一信息是输入?

DES_cblock ivec[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; 
    DES_key_schedule ks1, ks2, ks3; 

    // What (and how) should I set ks1/2/3 to? 

    DES_ede3_cbc_encrypt(input,output, 24*8, &ks1, &ks2, &ks3,ivec, DES_DECRYPT); 

单声道系统上的解码使用下面的代码完成;

TripleDESCryptoServiceProvider m_des = new TripleDESCryptoServiceProvider(); 

    byte[] IV ={0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; 
    m_des.KeySize = 24*8; 

    MemoryStream memStream = new MemoryStream(); 
    CryptoStream cryptStream = new CryptoStream(memStream,m_des.CreateDecryptor(key, IV), CryptoStreamMode.Write); 

    cryptStream.Write(input, 0, input.Length); 
    cryptStream.FlushFinalBlock(); 

据我所知,关键的时间表没有被指定,所以我不知道该如何设置它?我想它会从关键导出...一分钱开始下降......但如何?

任何想法? (最好从人与OpenSSL的专业知识,使用这个库是一个先决条件的项目)

回答

0

用的typedef开始为DES_cblock

typedef unsigned char DES_cblock[8]; 

填写你自己的意见,并使用代码如:

DES_key_schedule ks1, ks2, ks3; 
DES_cblock key_8bytes; 

/* ... copy the first 64 bits of the 192 bits into key_8bytes....*/ 
DES_set_key_unchecked(&key_8bytes, &ks1); 

/* ... copy the second 64 bits of the 192 bits into key_8bytes....*/ 
DES_set_key_unchecked(&key_8bytes, &ks2); 

/* ... copy the final 64 bits of the 192 bits into key_8bytes....*/ 
DES_set_key_unchecked(&key_8bytes, &ks3); 
+0

感谢格雷格,我昨晚发现这真的很晚......感谢您的确认。 – Roger 2011-02-10 10:28:34