RSA和AES混合加密练习

       RSA属于非对称加密算法,它虽然解决了“在不安全的信道上安全地传递密钥”这一问题,但缺点在于运算量太大,造成加/解速度太慢,所以在具体的工程应用上,实际上是混合使用了对称和和非对称加密算法,比如SSL/TLS协议是混合使用了RSA和AES算法。具体的过程是,用RSA算法加密对称密钥传递给对方,然后双方使用对称加密算法通信;另外,RSA还起到CA认证的作用(其实就是验证数字签名)。

       由此可见,RSA的作用已经由“加密数据”减弱为“验证CA证书”和“共享对称密钥”,如果第二个作用由DH算法代替,那么,RSA就仅用于验证CA证书了。

       为了理解用RSA共享对称密钥的过程,本文用手动的方法来逐步实现。

        

       A用户要把数据加密传输给B用户,步骤如下:

     1、B生成公钥/私钥对,并把其中的公钥导出,通过公开信道传递给A;

     2、A用对称加密算法对文件进行AES加密;

     3、A用B的公钥加密对称密码;

     4、A将加密后的对称密码和密文通过网络等渠道传送B;

     5、B用自己的钥解密对称密码;

     6、B用解密后的对称密码解密密文;


     具体的操作步骤:

     1、B生成RSA密钥对文件key.pri,然后从中提取公钥key.pub并通过公开信道传递给A:

           RSA和AES混合加密练习

   openssl genrsa -out key.pri 4096
   openssl rsa -in key.pri -pubout -out key.pub

      2、A生成32字节的随机密码:

                RSA和AES混合加密练习

   openssl rand -out passwd.bin 32

      3、准备待加密文件test.txt,用上面生成的随机密码,以AES算法加密明文test.txt,秘钥派生函数是pbkdf2:

   openssl enc -pbkdf2 -aes-256-cbc -in test.txt -out test.enc -pass file:passwd.bin
   del test.txt

      4、A用B发过来的公钥key.pub加密随机密码文件passwd.bin:

   openssl rsautl -encrypt -in passwd.bin -inkey key.pub -pubin -out passwd.enc
   del passwd.bin

      5、A通过公开信道,将加密后的对称秘钥passwd.enc,以及密文test.enc发送给B。

      6、B首先用自己的私钥解密对称秘钥:

      openssl rsautl -decrypt -in passwd.enc -out passwd.bin -inkey key.pri

      7、B再用对称秘钥解密消息,算法和秘钥派生函数与加密时用到的参数一样:

     openssl enc -d -aes-256-cbc -pbkdf2 -in test.enc -out test.txt -pass file:passwd.bin



上一篇:javascript加密库CryptoJS用法


下一篇:CBC字节翻转攻击例子