关于使用DER格式证书按RSAES-PKCS1-v1_5标准加密对称密钥的命令咨询
使用DER格式证书按RSAES-PKCS1-v1_5标准加密对称密钥的命令咨询
嗨,我来帮你搞定这个问题!其实你有两种灵活的处理方式,要不要提前从证书里提取公钥都可以,看你自己的使用场景和习惯:
方式一:直接用DER证书加密,无需提前提取公钥
OpenSSL支持直接读取DER格式证书里的公钥来完成加密,一步到位就行。你可以用这条命令:
openssl rsautl -encrypt -pubin -inkey cert.der -keyform DER -pkcs -in symmetric_key.bin -out encrypted_key.bin
我给你拆解下每个参数的作用:
-encrypt:指定进入加密模式-pubin:告诉OpenSSL我们要使用公钥进行加密(它会自动从传入的证书里提取公钥)-inkey cert.der:指定你的DER格式证书文件-keyform DER:明确说明输入的密钥/证书是DER格式(默认是PEM,所以这个参数不能少)-pkcs:这是最关键的!指定使用RSAES-PKCS1-v1_5填充标准,正好符合你的需求-in symmetric_key.bin:你的对称密钥文件(建议用二进制格式存储,避免文本编码问题)-out encrypted_key.bin:加密后的对称密钥输出文件
方式二:先提取公钥,再用公钥加密
如果你之后还需要多次用这个公钥加密,先把它从证书里提取出来单独保存会更方便:
- 从DER证书导出PEM格式的公钥:
openssl x509 -in cert.der -inform DER -pubkey -noout > pubkey.pem
参数说明:
-x509:处理X.509证书的工具指令-inform DER:指定输入证书是DER格式-pubkey:只提取证书里的公钥部分-noout:不输出证书的其他内容(比如主体、有效期这些)
- 用提取好的公钥加密对称密钥:
openssl rsautl -encrypt -pubin -inkey pubkey.pem -pkcs -in symmetric_key.bin -out encrypted_key.bin
这里因为公钥是PEM格式(OpenSSL默认格式),所以不用再加-keyform参数了。
一些额外注意事项
- 对称密钥的长度别超标:RSAES-PKCS1-v1_5需要预留11字节的填充空间,所以你能加密的最大数据长度是「RSA密钥长度(字节数)-11」。比如2048位的RSA密钥,最多能加密245字节的数据,而常见的AES-128(16字节)、AES-256(32字节)对称密钥完全没问题。
- 如果不想用文件,直接在命令行传入对称密钥的话,可以用管道输入,记得加
-n避免自动添加换行符:echo -n "你的对称密钥内容" | openssl rsautl -encrypt -pubin -inkey cert.der -keyform DER -pkcs -out encrypted_key.bin
备注:内容来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

