2017-01-30 54 views
1

我想使用Tcllib中的DES函数,但似乎我没有以正确的方式处理 变量。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 DES包解决它:

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真的没什么区别,除了更通用(而且显然是错误的) –