3des
計算 3DES 密鑰校驗值 (KCV)
我正在嘗試驗證 PC Crypto 生成的三重 DES 密鑰組件。關鍵部分是:
E6F1081FEA4C402CC192B65DE367EC3E
應返回的 KCV 值為:
212CF915
理論上,它應該被計算為:用 3DES 的密鑰部分加密二進制 0。
我一直在嘗試以下連結,但計算不起作用。 http://tripledes.online-domain-tools.com/
我在線上工具上使用了以下參數化。
任何人都可以確認計算是按照我提到的那樣進行的嗎?
我只是整理了一個小型 python (python 3) 範例,用於計算 PC Crypto 發出的 KCV(二進制 0 加密的前 4 個字節與密鑰部分)。我可以確認執行有效。該腳本基於 IBM 官方文件(我可以訪問官方儲存庫,儘管我無法線上找到文件來引用它們)。
import binascii import hashlib import base64 from pyDes import * data = '000000000000000000000000000000' key = 'E6F1081FEA4C402CC192B65DE367EC3E' key = binascii.unhexlify(key) data= binascii.unhexlify(data) print('key: ' + str(key)) k = triple_des(key, ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5) d = k.encrypt(data) print('KCV: ' + str(binascii.hexlify(d)[0:8]))
這裡有三個問題:
- 使用的線上工具需要一個 24 字節(48 個十六進製字元)的密鑰;因此您應該輸入
E6F1081FEA4C402CC192B65DE367EC3EE6F1081FEA4C402C
作為鍵,複製前 8 個字節;這是將 16 字節的兩塊三重 DES 密鑰擴展為 24 字節的三塊三重 DES 密鑰的慣用方法。- 您提供了 16 個字節(32 個十六進製字元)作為輸入,是所需字節數的兩倍;不過,這不會影響 KCV 的計算。
- KCV 值應該是結果的前 3 個字節(6 個十六進製字元),而不是 4 個字節(8 個十六進製字元)。
212cf9
修復此問題後,可以使用該工具正確獲得KCV 。注意:使用線上工具來檢查真實密鑰是一個壞主意,就像使用線上 RNG 生成真實密鑰是一個壞主意一樣。