发布于 2022-11-06 14:24:42
这里有几件东西要打开。
首先,不管所使用的AES模式(GCM、CBC、ECB、CTR等),如果您使用的是AES- 256,那么键的长度必须是256位。要生成以十六进制格式编码的随机256位密钥,可以使用以下命令:
head /dev/urandom | sha256sum
这会产生一个随机256位密钥,例如:
3fd00454580de44ea216d8b7b234267a2a6a6aec7e56d2b38e641a45597af0f2
现在,您可以将此密钥与带有openssl的iv一起使用,使用aes-256-cbc加密一些纯文本,如下所示:
echo -n 'hello world' | openssl aes-256-cbc -e -K 3fd00454580de44ea216d8b7b234267a2a6a6aec7e56d2b38e641a45597af0f2 -iv 302775dfc35a35c8081bbc6fdeacbd86 | xxd -p
这会产生密码文本:
7d5b44298bf959af149a0086d79334e6
现在,您可以使用相同的密钥和iv解密密文,以生成原始明文,如下所示:
echo -n '7d5b44298bf959af149a0086d79334e6' | xxd -p -r | openssl aes-256-cbc -d -K 3fd00454580de44ea216d8b7b234267a2a6a6aec7e56d2b38e641a45597af0f2 -iv 302775dfc35a35c8081bbc6fdeacbd86
这就产生了:
hello world
但是,您询问了如何使用openssl使用GCM模式进行AES加密,而不是使用CBC模式。不幸的是,openssl的命令行接口不可能做到这一点,因为不支持AES-GCM。有关这方面的更多信息,请参见https://www.openssl.org/docs/man1.1.1/man1/enc.html,然后向下滚动到“受支持的密码”部分,并注意其中的内容如下:
enc程序不支持CCM和GCM等认证加密模式,今后也不支持这种模式。必要时,enc接口必须开始流输出(例如,在不使用-out时对标准输出进行流输出),才能验证身份验证标记,从而导致enc在开始处理不受信任的数据并在身份验证失败时无法回滚的管道中使用。
发布于 2022-11-06 15:08:06
我们只在很难手动操作的时候才谈到密钥生成。例如,要为RSA或25519这样的特定ECC曲线创建一对密钥,需要使用较大的数字进行大量计算。
AES-256的密钥可以很容易地手工创建。任何256位长的位序列都可以用作AES-256密钥.您不必使用任何生成器并手动创建有效的密钥。人类生成的密钥通常比基于质量熵源的质量随机生成器生成的熵小,这就是为什么建议使用生成器的原因。
PEM格式仅用于PKI。PKI使用非对称加密。其中,as AES是对称算法。在AES中没有私钥、公钥、证书,这就是PEM不适用于AES的原因。
https://security.stackexchange.com/questions/266130
复制相似问题