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

OpenSSL在aes加密中填充密钥?

淳于坚壁
2023-03-14

我正在尝试将aes-128-cbc加密与openssl一起使用,我希望密钥需要32位。但是,我注意到当我输入密钥长度为18时,openssl不会给我错误。

echo hello | openssl enc -aes-128-cbc -A -a -nosalt -K 123456789012345678 -iv 66666666666666666666666666666666

output:zBN+65infn74QK+prfY6kw==

但是,如果我在密钥后添加0,直到它是32位,我仍然会得到相同的结果。

echo hello | openssl enc -aes-128-cbc -A -a -nosalt -K 12345678901234567800000000000000 -iv 6666666666666666666666666666666

output:zBN+65infn74QK+prfY6kw==

有文档说OpenSSL给键添加了填充吗?

编辑:我需要在代码中重现此行为。我得到了密钥,但不能保证密钥是多少位数。

共有2个答案

易超
2023-03-14

现在,如果您的key或IV太短,OpenSSL会打印一个警告,说< code >十六进制字符串太短,用零字节填充长度。

但是,它没有提到如何(前缀或附加)。

幸运的是,您可以使用-p来查看OpenSSL正在使用的确切密钥和IVs。

显然,它在右侧附加零。

>openssl enc -aes-128-cbc -d -K 614c9b1fa9ea1b1be878929c592d -iv 0276 -nosalt -in enc -out dec -p
hex string is too short, padding with zero bytes to length
hex string is too short, padding with zero bytes to length
key=614C9B1FA9EA1B1BE878929C592D0000
iv =02760000000000000000000000000000
皇甫喜
2023-03-14

具有 128 位密钥的 AES 是 16 字节或 32 十六进制数字密钥。它可能是零填充未指定部分的键,不依赖于键填充,即未指定的行为。

最好为加密函数提供准确大小的输入,为AES 128位密钥指定32位十六进制数字。

 类似资料:
  • 我正在尝试使用带有相同密钥和 iv 的 AES 加密相同的文本。我使用 bash 方法和 ruby 的 openssl stdlib,并对加密结果进行 b64 编码。但结果不同!我试图理解为什么。这是我所做的: 红宝石(1.9.3-p448) 砰砰�� -iv参数设置为上面计算的iv_hex值。 ========================================= 我仔细检查了静脉注

  • 我正在尝试将java代码转换为NodeJs代码。这有点复杂,因为定制的格式包括密码和salt。 在main方法中有一个例子。 以下是我的java代码: 我正在尝试下面这样的JS代码,但不知道我做错了什么: 它抛出一个错误: 谢谢

  • 我对我当前尝试访问的API的加密有以下要求: < li>PKCS7填充方法 < li>CBC加密模式 < li>AES密钥大小256,块大小128 每次我提交带有加密的API时,API似乎都有问题(不幸的是没有产生错误)。 问题: PKCS7填充方法到底是什么,可以用php实现? AES 256很好,但是块大小到底是什么意思? IV到底是做什么的?

  • 我目前正在尝试使用OpenSSL加密二进制文件(它是项目的一部分,必须使用OpenSSL)。我设法安装了OpenSSL并将其与Visual Studio 2010链接。 在完成我的程序时,我没有得到任何带下划线的错误,但是在编译时,我得到了以下结果 有人知道如何解决这个错误吗?

  • 我试图在Python中实现以下内容:openssl enc-e-aes-256-cbc-base 64-k"秘密密码"-inplaintext.txt-outciphertext.txt openssl enc-d-aes-256-cbc-base64-k“秘密密码短语”——密文形式。txt-out验证。txt 我已经尝试了几个不同的模块,PyCrypto,M2Crypto等,但似乎无法获得将密码

  • 我正在使用以下函数通过Qt中的OpenSSL库加密我的数据: “源”在“123456789012345678901234567890123456789012ABC”中。 “密码”为“1HA!DH==SJAH48S8AK!?SKIITFI120XX”。 所以...如果我正确的话,那么EVP_BytesToKey()应该从密码中生成一个密钥,并提供数据以在后面解密字符串。 对base64编码的密钥是: