安全算法:公开密钥加密之RSA算法

安全算法:公开密钥加密之RSA算法

今天是2021年12月18号周六⏲04点53分,距离2022年仅剩了13天了。睡醒了,那就整理一下这周接触到的用于加密的RSA算法吧!当时第一次接触这个知识点是在《我的第一本算法书》📖 中,有兴趣的朋友可以去看看,算是一本算法基础的书。

  1. 公开密钥加密:简介

    1. 公开密钥加密(又称“非对称加密”)是加密和解密使用不同密钥的一种加密方法。包括公开密钥和私有密钥(成对生成的,网上有工具网站,可以自行找一下)。
    2. 公开密钥(public key,后面简称P):加密用的密钥
    3. 私有密钥(secret key,后面简称S):解密用的密钥
  2. 公开密钥加密:流程

    1. 需求:A(发送方)通过互联网💻 向B(接受方)发送一些需要加密的数据。
    2. 第一步,由B生成公开密钥P和私有密钥S
    3. 第二步,B将公开密钥P发给A
    4. 第三步,A收到公开密钥后,使用公开密钥P将要发送的数据进行加密操作
    5. 第四步,B将加密好的数据从网上发给A
    6. 第五步,A收到B发送的数据后,使用私有密钥对接收到的数据进行解密操作
  3. 具体实现:示例code

    1. 引入RSA相关文件

      1. 第一种方式,在项目中通过

        1. npm i jsencrypt 
          //或 npm i encryptlong -S 用于长文本加密
          
      2. 第二种方式,通过CDN引入(本例子使用此方法了,示范方便😆 )

        1. <script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>
          
      3. code

        // 引入
        <script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>
        
        //JavaScript
        //公钥和私钥自己可以在网上找参考,很多网站都可以在线生成公钥和私钥
        //公钥         
               let pub_key ="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIzDmeVOsgifMF98ixU72W9XaSukXYpUdleGR9p3GZOVuZdWXqQzwHUdAKqrPPHOUCU/w7UIrBXZJNIgBDWEqdSpXOVcNgkDBo7kjPBoGXo5pK36WImetToaKOrwROQlZzppRgMeU1zpOc/RwNCJyRhH92dlkoSgOz9MxmT094DwIDAQAB"
        //私钥       
                let pri_key ="MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMjMOZ5U6yCJ8wX3yLFTvZb1dpK6RdilR2V4ZH2ncZk5W5l1ZepDPAdR0Aqqs88c5QJT/DtQisFdkk0iAENYSp1Klc5Vw2CQMGjuSM8GgZejmkrfpYiZ61Ohoo6vBE5CVnOmlGAx5TXOk5z9HA0InJGEf3Z2WShKA7P0zGZPT3gPAgMBAAECgYB+/3vpwje8KsPEIIWUcixVEAbgomOOtGpFqTGVr5PPn1Fp67B7y+5pirsUJAb5lYLaSBgdw8Eer3nawwh7j5oQZVcjoeg49xfbwgy69HKeLbJ6zFsapw3CiwUp5/yxkhFrJDWctNkGObOF4/QcBthiwqCJND3l+vDG4owQ2mmWkQJBAPr1pbOjnIpFVxieGsr41OYlY3QBdHadD3Lke5fCzxp6zz2GuMFmcsCleVPPNRsfqbHQNpErT9bRr3P3WQHi9bUCQQDM1Kl8PZ2cpb5iLsrnawy6XVINWDemTHDRmJrCuc9nR9P01sFNWs9wcNpnSjNBEqqchj3A5M4uGsvlq4PeWZEzAkEAsvE5R8/frNAofEsv+45V8Ay0z2DCNFllTJ0Sa3HizpTG9K39SxnLtQXIbzQOP9rh2wIGBpkFgr1dB6lU8/1rCQJBAJj5Ri7ckYZ5HkuTaMQWZeYVZf9DYCRZuHRAhWxieuxGb5zOeoU8CeqOzf4QI2E5AKRveVVDTFyQdLDtPEnmGJMCQQCxDfrs4GiykBLukPKr1U/MHxzl+yNpgkcl9mV5vUgon9ZTXbqXlM/2V+X4tUNtU5rxbe9Xudokvpqc75LqrxgS"
        //需要被加密的文本
                let text = 'I am a secret!'
        //公钥加密
                let encrypt = new JSEncrypt();
                encrypt.setPublicKey(pub_key); //公钥 
                let encrypted = encrypt.encrypt(text); //公钥加密 括号内是需要加密的文本
                console.log('公钥加密',encrypted);//返回值 加密后的文本
        //私钥解密
        		let decrypt = new JSEncrypt();
                decrypt.setPrivateKey(pri_key); //私钥
                let uncrypted = decrypt.decrypt(encrypted) //私钥解密
                console.log('私钥解密',uncrypted);//返回值 解密后的文本 -- text
        
  4. 存在的风险

    1. RSA也是可能会被第三方(简称:X)窃听到,大概流程如下👇
      1. 在接收方B给发送方A发送公钥时,窃听者X先截取到B发送的公开密钥🔑
      2. 窃听者X将B发送的公开密钥替换为自己准备的公开密钥,然后将自己的公开密钥发送给A
      3. 发送方A在不知情的情况下,用窃听者X的公开密钥进行加密,然后准备发送给B
      4. 窃听者X再拦截A发送出的数据,用对应的私钥解开加密数据(成功窃听到
      5. 窃听者X再用B发送的公开密钥加密,再将加密后的数据发送给B,此时接收方B也可以用对应的私钥解密!
      6. B可能也意识不到数据已经被窃听
    2. 上述这种,通过中途替换公开密钥来窃听数据的攻击方法叫做”中间人攻击“!
  5. 总结

    1. 上周通过在项目中实际使用RSA加密方式,对具体的流程有了一定的了解
    2. 周六在用文字记录下具体的实现流程,也方便以后自己的复习
    3. 学得快,长时间不用的话,忘得也快!😆

    日子要一天一天的过,事情也要一件一件的做,着急只会事倍功半.春天播种,秋天收获,所以不要着急,沉淀自己,我们都会取得自己满意的成绩! 加油💪!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值