当前位置: 首页 > 知识库问答 >
问题:

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

归德厚
2023-03-14

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

为了留档和方便访问,我想记录如何使用命令行工具解密密文。我试过mcrypt和openssl命令行工具,似乎无法使用命令行工具正确解密密文。

数据在模式 ecb 中使用 rijndael-128 进行加密。这超出了我的控制范围。

给定以下最小示例:

  • 加密数据存储在二进制文件“./密文”中。
    • 密文是这些字节的序列:0xfb 0x0d 0xfb 0xa2 0xfc 0x43 0x0a 0xe5 0xe8 0x8b 0x25 0xac 0x06 0x9c 0xdd 0x77
    • 例如
    • ,可以使用打印“\xfb\x0d\xfb\xa2\xfc\x43\x0a\xe5\xe8\x8b\x25\xac\x06\x9c\xxdd\x77”

    我可以用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))
    

    在佩尔中像这样:

    #!/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:
    

共有1个答案

姬高澹
2023-03-14

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

openssl aes-256-ecb -d -nopad -K 7979797979797979797979797979797979797979797979797979797979797979 -in ciphertext
 类似资料:
  • 问题内容: 我有一个使用openssl工具进行加密的bash脚本。 以及试图解密脚本生成的文件的Java代码。 当我运行Java代码时,它不会打印任何内容。脚本和Java代码之间是否不匹配? 第二个问题是我是否可以重写它以使用密码而不是key / iv。为此,是否有办法知道openssl用于给定密码的iv? 问题答案: 正如上面提到的@ Polynomial,bash脚本和Java代码之间的键和i

  • 简介 我们基于Python SDK实现了命令行工具cloudml,可以方便使用访问Xiaomi Cloud-ML服务。 由于sdk的接口更新较快,命令的使用方式可以通过-h选项获取最新的使用方法。 初始化配置文件 cloudml init 查看帮助 cloudml -h TrainJob相关命令 列举训练job cloudml jobs list 提交训练job cloudml jobs s

  • 工欲善其事,必先利其器。学好SQLite的命令行工具,对于我们学习SQLite本身而言是非常非常有帮助的。最基本的一条就是,它让我们学习SQLite的过程更加轻松愉快。言归正传吧,在SQLite的官方下载网站,提供了支持多个平台的命令行工具,使用该工具我们可以完成大多数常用的SQLite操作,就像sqlplus之于Oracle。以下列表给出了该工具的内置命令: 命令名 命令说明 .help 列出所

  • 命令行工具 meteor help 获取 meteor 命令行使用帮助。运行 meteor help 会列出meteor所有命令。运行meteor help &lt;command&gt;会打印出关于meteor &lt;command&gt;的详细帮助。 meteor create &lt;name&gt; 创建一个名为&lt;name&gt;的子目录,并在里面新建一个Meteor应用。 met

  • web3j的完全jar文件分发包对每一次发布都提供命令行工具。命令行允许你从终端(terminal)使用web3j的一些功能: 这些工具提供: 钱包创建 钱包密码管理 从一个钱包转移到另一个钱包以太币 solidity智能合约封装包的产生 命令行工具可以从github项目存储库的releases页面下载zipfile/tarball包,或者通过源代码自己编译获得;OS X用户也可以通过Homebr

  • 命令行工具 web3j的jar包为每一个版本都提供命令行工具。命令行工具允许你直接通过一些命令使用web3j的一些功能: 钱包创建 钱包密码管理 资金从钱包转移到另一个 solidity编写的智能合同功能打包 请参阅文档以获得命令行相关的进一步的信息。