zoukankan      html  css  js  c++  java
  • 非对称加密算法(公钥和私钥)

      非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

      公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。(此处引用了 百度百科 的词条解释)

      下面来说说具体是如何使用的。

      首先在页面中引入 jsencrypt 文件(可以使用 CDN加速)

      接下来可以使用密钥生成工具来生成公钥和私钥(推荐 加密解密工具

      完整案例(ps:公钥和私钥可以使用密钥生成工具来生成): 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="https://cdn.bootcss.com/jsencrypt/2.3.1/jsencrypt.js"></script>
    </head>
    <body>
        <script>
            var public_key = "-----BEGIN PUBLIC KEY-----" +
    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3OhpxaOoSpObJ3CXh31T1kE5I"+
    "b5DfCUB59vX7fxliFDEIknR1nkAk+YQltVF/RIcaoT8ni/NGBUJxp19nojpLUes2"+
    "kqaVo5H8F7WOw2okHwtCGGEb+MMol11qCKG1nGl7cZtEu+2T/O1A4wYzvg6XUsXJ"+
    "+HPnc2/15D410bK94QIDAQAB" + 
    "-----END PUBLIC KEY-----";
            var private_key = "-----BEGIN PRIVATE KEY-----" +
    "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAPc6GnFo6hKk5snc" +
    "JeHfVPWQTkhvkN8JQHn29ft/GWIUMQiSdHWeQCT5hCW1UX9EhxqhPyeL80YFQnGn" +
    "X2eiOktR6zaSppWjkfwXtY7DaiQfC0IYYRv4wyiXXWoIobWcaXtxm0S77ZP87UDj" +
    "BjO+DpdSxcn4c+dzb/XkPjXRsr3hAgMBAAECgYB3/nKRMwvRaso9laWpYN16psTo" +
    "MYZOSs5JpE01+TWXvhcigvsVj26ww46ZQs1AiUFN8o+VoT69cJYUVdlfkoTZz7nc" +
    "a8aH/8CVjEANjD8DGmzOJJIFpWXP0wMYta09SdCGKnKbmmlDX1MHAauA7oZy81gy" +
    "8Di0DTfTLv3oW4YCBQJBAP5OfbZOorq7sPElk+W/oJhn5kf5Ym5QZc2KlpOKSTw4" +
    "uUIBoA//PbdpVTzz9UJSQF/D6sgLBCeDnd6OGg368pcCQQD434s1Bnbc45xTEC/R" +
    "zorB8eD3QHDIfrXfaLTy+KPPaGUP9QUu+m9YMQwVsYSW7UzRhKqPQjsgHFbO9eXx" +
    "nvpHAkEArK7z4lWnXpGQ508TDNGA5by3vGv1kN77IgVXljwy2rfR5KZh4Dr7142p" +
    "Gci25CAiImVRCiGg4owXKUbpHlEnZQJBAMsvpzW5e13ILp7aPlBq8np5ghQbdnka" +
    "il5F3EXqncL+FlS61GqQaEt2b8leT0PxpaABUkb36dHDkVQTCpMEGo0CQERzIpg1" +
    "F1uePVCsDQcRJ3TZ6CKeRsWzJUmuz10s+v8wIKzN1Dxtyok4qEDAemR81LJPsldw" +
    "9SocEoKudNJ4NLA=" +
    "-----END PRIVATE KEY-----";
    
            // 采用公钥进行加密
            var encrypt = new JSEncrypt();
            encrypt.setPublicKey(public_key);
            var encrypted = encrypt.encrypt('世上无难事,只怕有心人'); // 加密
            console.log(encrypted);
    
            // 采用私钥进行解密
            var decrypt = new JSEncrypt();
            decrypt.setPrivateKey(private_key);
            var uncrypted = decrypt.decrypt(encrypted); // 解密
            console.log(uncrypted)
        </script>
    </body>
    </html>



      关于jsencrypt文件的使用,详情见 http://www.bootcdn.cn/jsencrypt/readme/                                                                                      

  • 相关阅读:
    unity与android交互总结
    Unity3d 下websocket的使用
    Unity的Shader如何控制投影颜色
    _LightColor0将会是主要的directional light的颜色。
    Unity shader saturate
    今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因
    欧几里得空间
    Unity ios、android、pc一键打包(一)
    [AR]高通Vuforia Getting Started
    unity3d 为什么要烘焙?烘焙作用是为了什么?
  • 原文地址:https://www.cnblogs.com/jf-67/p/8185650.html
Copyright © 2011-2022 走看看