使用OpenSSL RSA密钥对加密10MB-20MB大文件时遭遇数据超出密钥大小错误的解决方案咨询
使用OpenSSL RSA密钥对加密10MB-20MB大文件时遭遇数据超出密钥大小错误的解决方案咨询
嗨,这个问题我之前也踩过坑,其实是对RSA的使用场景理解有点偏差啦~RSA本身的设计就不是用来直接加密大文件的,它的加密容量受限于密钥长度(比如2048位的RSA,用PKCS#1 padding的话最多只能加密245字节左右的数据),所以你直接加密10-20MB的文件肯定会报“数据太大”的错误。
正确的做法是采用混合加密方案:用对称加密(比如你熟悉的AES-256-CBC)来加密大文件,然后用RSA公钥加密这个对称密钥——这样既兼顾了对称加密的速度(适合大文件),又保留了RSA非对称加密的安全性(只有持有私钥的人能解密出对称密钥,进而解密文件)。
下面是具体的操作步骤:
加密流程
第一步:生成一个随机的AES-256对称密钥
openssl rand -out aes_key.bin 32这里生成32字节的随机数据,正好对应AES-256的密钥长度。
第二步:用这个对称密钥加密你的大文件
openssl enc -aes-256-cbc -salt -in file.txt -out encrypted_file.bin -pass file:aes_key.bin这个命令和你之前单独用AES加密的逻辑一致,只是把密码换成了从文件读取的随机密钥。
第三步:用RSA公钥加密这个AES密钥
openssl pkeyutl -encrypt -in aes_key.bin -out encrypted_aes_key.bin -inkey public.key -pubin现在这个
encrypted_aes_key.bin就是只有你的RSA私钥能解密的密钥文件。
之后你只需要把encrypted_file.bin和encrypted_aes_key.bin发给接收方就行,对方用你的RSA私钥就能解密啦。
解密流程
第一步:用RSA私钥解密出AES密钥
openssl pkeyutl -decrypt -in encrypted_aes_key.bin -out aes_key_decrypted.bin -inkey private.key执行后会提示你输入私钥的密码(就是你生成
private.key时设置的密码)。第二步:用解密后的AES密钥还原大文件
openssl enc -d -aes-256-cbc -in encrypted_file.bin -out decrypted_file.txt -pass file:aes_key_decrypted.bin
这样就能完美解决大文件加密的问题啦,既安全又高效~
备注:内容来源于stack exchange,提问作者rahuls_
相关产品推荐
相关产品推荐

