2017-01-30 15 views
1

Я хочу использовать функцию DES из Tcllib, но, похоже, я не обрабатываю переменные правильным образом.TCL Tcllib DES неправильные параметры?

Вот код:

set key DAAE57F813459B3B 
set key_b [binary format H* $key] 

set data 2D7A99F520D684B4 
set data_b [binary format H* $data] 

set result [DES::des -dir encrypt -key $key_b -hex $data_b] 

При использовании этих значений я получил ошибку:

bad option "-z...": must be one of -chunksize, -dir, -hex, -in, -iv, -key, -mode, -out, -weak 

Это кажется, что функция DES интерпретирует '2D ...' как «-z ... 'и, следовательно, в качестве опции (что не допускается).

Когда я обмениваю значения (ключ < -> данные, данные < -> ключ) У меня нет ошибки.
Также, когда я использую данные 1D ..., 3D ... и т. Д., Функция работает нормально.

Я использую Tcllib V1.18 и пакеты: des, sha1, pki, asn, aes, math :: bignum, md5, base64.

Есть ли у кого-нибудь идеи, как передать переменные «данные» в функцию DES без интерпретации данных как опции?

ответ

1

Проблема заключается в том, что код драйвера высокого уровня в команде DES::des путают данные, начинающиеся с байта - (0x2D). Это отчетная ошибка; сообщите об этом.

Но вы можете обойти это, используя интерфейс низкоуровневое в пакете Tcllib дез:

package require des 

set key DAAE57F813459B3B 
set key_b [binary format H* $key] 

set data 2D7A99F520D684B4 
set data_b [binary format H* $data] 

# The [binary format] below is for the initialisation vector (IV) which should usually be 
# 64 zero bits to start with if you're using simple encryption. 
set d [DES::Init cbc $key_b [binary format I* {0 0}]] 
set encBytes [DES::Encrypt $d $data_b] 
DES::Final $d 

# We've got the bytes out; let's convert to hex for printing 

binary scan $encBytes H* encHex 
puts $encHex; # --> “4cd33892969591b4” 

Идущий в обратном направлении довольно легко тоже:

package require des 

set key DAAE57F813459B3B 
set key_b [binary format H* $key] 

set encHex 4cd33892969591b4 
set encBytes [binary format H* $encHex] 

set d [DES::Init cbc $key_b [binary format I* {0 0}]] 
set decBytes [DES::Decrypt $d $encBytes] 
DES::Final $d 

binary scan $decBytes H* decHex 
puts $decHex; # --> “2d7a99f520d684b4” 
+0

Если вы «Я делаю это много, вероятно, неплохо было бы закрепить основное шифрование/дешифрование в процедуре. Что не так сильно отличается от того, что на самом деле 'DES :: des', за исключением того, что это более общий (и, очевидно, багги) –