非对称加密算法(公钥和私钥)

Posted 心欲无痕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非对称加密算法(公钥和私钥)相关的知识,希望对你有一定的参考价值。

  非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(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/                                                                                      

以上是关于非对称加密算法(公钥和私钥)的主要内容,如果未能解决你的问题,请参考以下文章

关于RSA中公钥和私钥的具体使用情况区分

请问SSL加密的公钥和私钥区别

公钥、私钥、哈希、加密算法基础概念

RSA的公钥、私钥

区块链小百科19期 非对称加密算法?

入门|非对称加密算法