解 TripleDES 的加密

edited 三月 2014 in 進階PHP討論
某單位丟了一串字跟金鑰,說是 TripleDES 加密,然後就什麼都不知道,所以走了很多冤枉路...

不確定是否適用所有情況,畢竟 TripleDES 有很多種組合,我只貼我成功解密的方式,也是參考網路的
http://stackoverflow.com/questions/1061765

程式碼:
$content = 'xxx'
$key = 'yyy';

$encrypt = base64_decode($content);
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypt = mcrypt_decrypt(MCRYPT_3DES, $key, $encrypt, MCRYPT_MODE_ECB, $iv);
$str = trim($decrypt, \"\0..\32\");

echo \"original: {$str}\n\";
標籤:

評論

  • 是藍星?

    因為加密是採用區塊的方式進行加密,
    得先請原始加密的一方提供加密的模式到底是 CBC ECB or ...
    另外如果原始的資訊長度剛好不是區塊長度的整數倍時可能還得搭配 pkcs7 padding這類的編碼
    去補足長度。

  • 某銀行,這就是很有趣的地方,他給我的解釋
    "我們沒有提供mode, iv 兩個參數,也有別的客戶用PHP開發,但沒跟我們要過兩個參數,麻煩您再查看是否有別的解密作法"

    感覺翻譯起來好像是
    "你太弱了,找一個強的來吧"
  • 有人問到加密的方式,所以放上測試可行的結果
    mcrypt_encrypt(MCRYPT_TRIPLEDES, $config['tdesKey'], pack('H*', sha1($data).'00000000'), MCRYPT_MODE_CBC, $config['iv']);


    $data 就是希望加密的字串, $config['tdesKey'] 是 key ,而 $config['iv'] 沒特別註明也許會是 00000000
Sign In or Register to comment.