hen*_*nry 2 ruby encryption blowfish
这与我昨天的问题有关(得到了很好的结果): 在ruby中使用Blowfish加密字符串会返回比php中的相同进程更短的字符串
现在,我认为在相反的方向上是一个类似的问题.我使用php来加密字符串:
php > require_once 'Crypt/Blowfish.php';
php > $input = "input string";
php > $key = "some key";
php > $crypt = new Crypt_Blowfish($key);
php > echo bin2hex($crypt->encrypt($input));
79af8c8ee9220bdec2d1c9cfca7b13c6
Run Code Online (Sandbox Code Playgroud)
这正是预期的结果.但是,当我尝试解密ruby中的字符串时,它只给出了输入的子集:
irb(main):001:0> require 'rubygems'
r=> true
irb(main):002:0> require 'crypt/blowfish'
=> true
irb(main):003:0> key = "some key"
=> "some key"
irb(main):004:0> input = "79af8c8ee9220bdec2d1c9cfca7b13c6"
=> "79af8c8ee9220bdec2d1c9cfca7b13c6"
irb(main):005:0> block = input.gsub(/../) { |match| match.hex.chr }
=> "y\257\214\216\351\"\v\336\302\321\311\317\312{\023\306"
irb(main):006:0> blowfish = Crypt::Blowfish.new(key)
=> #<Crypt::Blowfish:0xb73acbd8 @sBoxes=[[3156471959, 1769696695, 1443271708, 181204541,
... 1894848609], @key="some key">
irb(main):008:0> blowfish.decrypt_block(block)
=> "input st"
Run Code Online (Sandbox Code Playgroud)
知道我现在在做什么愚蠢的事吗?
河豚块长8个字节.请注意,当您要求解密一个块时,这正是您要回复的字符数.
必须有更多代码才能获得最终块,或者您需要在接下来的8个字节上再次调用decrypt_block.
您可能想尝试使用decrypt_string而不是调用decrypt_block.
从测试:
userkey = "A BIG KEY"
bf = Crypt::Blowfish.new(userkey)
string = "This is a string which is not a multiple of 8 characters long"
encryptedString = bf.encrypt_string(string)
decryptedString = bf.decrypt_string(encryptedString)
assert_equal(string, decryptedString)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |