zoukankan      html  css  js  c++  java
  • Mac下如何生成RSA加密的私钥和公钥+JS中使用RSA加密

    第一部分:RSA公钥和私钥的生成

    关于RSA加密算法的介绍这里就不复制粘贴了,下面讲的是如何在Mac下利用命令行生成RSA的私钥和公钥。

    使用command生成2048位的私有密钥

    openssl genrsa -out private_key.pem 2048

    当前的目录下会生成一个名为 private_key.pem 的文件,如果用文本编辑器打开,你会发现是这样的:

    这些东西就是我们刚刚生成的密钥,这个东西只能放在服务端,如果这个东西泄漏,整个RSA加密环节就暴露了。

    接下来我们利用私钥生成公钥(command命令必须在刚才的目录下执行,否则会找不到private_key.pem)

    注意:这里生成的公钥只适合在JS中的library使用

    openssl rsa -inform PEM -modulus -noout < private_key.pem

    如果执行命令的时候报错:

    这说明密钥文件并不是SSL命令生成的,只要执行以下的命令就可以了:

    openssl rsa -pubin -inform PEM -modulus -noout < public_key.pem

    执行这条命令我们就可以打印出公钥了:

    使用公钥的时候记得把前面的"Modulus="去掉,得到的公钥就可以直接在JS中使用了(第二部分会讲到JS中使用RSA加密的方法)。

    在其他的语言中使用的公钥并不是这个样子的,接下来我们要通过公钥来生成私钥。

    openssl rsa -in private_key.pem -pubout -out public_key.pem

    需要注意的是这里生成的私钥和公钥都是pem格式的,有些语言可能需要pkcs8格式,需要继续在命令行中对私钥进行格式转换:

    openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out private_key_pkcs8.pem

    公钥的格式转换同上,就不赘述了。

    第二部分:JS中使用RSA加密参数

    在JS中使用RSA加密需要引入3个js文件:

    Barrett.js

    BigInt.js

    RSA.js

    在JS中直接调用方法就可以了:

    function RSA_Encryption(encryptingString) {
    var publicKey = 'CA8C4C8364B6C8ABE8FDB20438805744AFEC9435F0A047F4E521936EB9C307A36FCFA5EAFBCF1C42A88D51A74F77EBC9E84B7BA5B43041818A26884813F914ED907BF5C31F174ED1A46AE5D6927AD03829B4AC8335E9C3F9C35FE67D100C4980791D137FCE05110CF505FD4238787EB8BE8C1C4EC5AD71363BD1195D283DE3E5';
    setMaxDigits(128);
    var key = new RSAKeyPair('10001','10001',publicKey);
    var encrypted_string = encryptedString(key,encryptingString,RSAAPP.PKCS1Padding);
    return encrypted_string;
    }

    setMaxDigits方法中是设置数据区大小的,如果你用的是1024-bit的密钥,那么这里的数值要>=1024 * 2 /16 = 128

    -------------------------------------------------7.13日更新-------------------------------------------------

    JS里面的用法有问题,需要加一行代码处理才可以:

        function RSA_Encryption(encryptingString) {
            var publicKey = 'CA8572C41BF6B92A895B132A8853DC0EC416ABFC298466C882F4E1D3298BE776132E711A2C6F560A6A1F5EFC339FC438A83768E6B6EFC1D9936570198481F40B53B826935F19D6FDF7950E5747697F3051FC2F8C1DD7EB66885301444A10B059F4468D8362989960E76FBB0A0B7DDC1176FBE0A279DF7032A643FC0AEC48D8CD';
            setMaxDigits(262);
            var key = new RSAKeyPair('10001','10001',publicKey,1024);
            var encrypted_string = encryptedString(key,encryptingString,RSAAPP.PKCS1Padding,RSAAPP.RawEncoding);
            encrypted_string = window.btoa(encrypted_string);
            return encrypted_string;
        }

    参考链接:http://www.ohdave.com/rsa

  • 相关阅读:
    Java中数据类型的分类
    PL/SQL Developer工具
    Oracle数据库SQL语句的分类
    Oracle数据库控制台常用命令
    关于C#中泛型类型参数约束(where T : class)
    C#动态操作DataTable(新增行、列、查询行、列等)
    ADO.NET 全面整理
    区块链入门教程
    排序算法汇总
    常用SQL
  • 原文地址:https://www.cnblogs.com/CrazySL/p/5659748.html
Copyright © 2011-2022 走看看