如何使用命令行工具解密rijndael

How to decrypt rijndael with command line tool

我有第三方的加密测量数据来源,这些数据经常更新并且需要解密。我知道如何使用 mcrypt 库在 perl 或 ruby 中解密数据。

出于文档目的和便于访问,我想记录如何使用命令行工具解密密文。我已经尝试了 mcrypt 和 openssl 命令行工具,但似乎无法使用命令行工具正确解密密文。

数据以 ecb 模式使用 rijndael-128 加密。这是我无法控制的。

给定以下最小示例:

我可以像这样用 mcrypt 解密 ruby 中的密文:

require "rubygems"
require "mcrypt"

key = "y"*32
ciphertext = IO.read("ciphertext", :encoding => "BINARY")
puts(Mcrypt.new("rijndael-128", :ecb, "y"*32).decrypt(ciphertext))

在 Perl 中是这样的:

#!/usr/bin/perl
use Crypt::Rijndael;

my $key = ("y" x 32);
my $ciphertext;
open(my $fh, '<', "ciphertext") or die "cannot open ciphertext";
{
   local $/;
   $ciphertext = <$fh>;
};
my $cipher = Crypt::Rijndael->new($key, Crypt::Rijndael::MODE_ECB());
print($cipher->decrypt($ciphertext) . "\n");

我想知道如何使用命令行工具,最好是openssl或mcrypt来解密这样加密的密文。我已经尝试过这些调用,但显然我无法正确调用它们:

$ mcrypt -k  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy -a rijndael-128 -m ECB -d ciphertext
Warning: It is insecure to specify keywords in the command line
An OpenPGP encrypted file has been detected.
Unknown suffix. Will append '.dc'.
File ciphertext was NOT decrypted successfully.
$ openssl enc -aes-256-ecb -d -a -K 7979797979797979797979797979797979797979797979797979797979797979 -in ciphertext -out file.txt
bad decrypt
140057024816256:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:../crypto/evp/evp_enc.c:559:

-a 选项告诉 openssl 密码是 base64 编码的。但这是错误的,实际上它不是 base64 编码的。此外,由于加密时未使用填充,因此您还需要指定 -nopad 选项。

openssl aes-256-ecb -d -nopad -K 7979797979797979797979797979797979797979797979797979797979797979 -in ciphertext