两种方式生成RSA 公钥私钥

两种方式-生成RSA256私钥公钥

两种方式生成私钥公钥

1.ssh-keygen 方式
  • 生成加密长度4096位密钥 

    生成私钥:ssh-keygen -t rsa -b 4096 -f ${private}.key

    生成公钥:openssl rsa -in ${private}.key -pubout -outform PEM -out ${public}.key.pub

    转换格式:openssl pkcs8 -topk8 -inform PEM -in jwtRS256.key -outform pem -nocrypt -out pkcs8.pem

  • 生成加密长度1024位密钥

    生成私钥:ssh-keygen -t rsa -b 1024 -f ${private}.key

    生成公钥:openssl rsa -in ${private}.key -pubout -outform PEM -out ${public}.key.pub

    转换格式:openssl pkcs8 -topk8 -inform PEM -in jwtRS256.key -outform pem -nocrypt -out pkcs8.pem

2.openssl方式
  • 生成加密长度1024位密钥

    生成私钥:openssl genrsa -out rsaprivatekey.pem 1024

    生成公钥:openssl rsa -in rsaprivatekey.pem -out rsapublickey.pem -pubout

    转换格式:openssl pkcs8 -topk8 -in rsaprivatekey.pem -out pkcs8rsaprivate_key.pem -nocrypt

最大加密明文长度为117位,最大解密密文128位

比如:需要加密String param = "id=1&name=张三",实际上只能加密到:id=1&name. 

使用一对1024位密钥私钥-加密后得到密文:[B@39ba5a14.

解密也只能按照128位:[B@39ba5a14 将1024位公钥解密后 得到id=1&name 

我这里使用的公私钥分别为:

publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr1CJfUouPBVoGAnoxUd2Uj8MZ\n" +
        "NFvFSBYNlK74zwQxFsPXhNq2ba3JQCwV6P35cNqEK2htaG+phr/Gy+3YVQWl1Tau\n" +
        "5bVbsWCkwO+5EHdx9dN1IfUUO9Y9NDarUxYyeBOvtfc2I/bA5xwPkskRMzBKWbp1\n" +
        "kC9AxstNiOoJnUNF3wIDAQAB";

privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKvUIl9Si48FWgYC\n" +
        "ejFR3ZSPwxk0W8VIFg2UrvjPBDEWw9eE2rZtrclALBXo/flw2oQraG1ob6mGv8bL\n" +
        "7dhVBaXVNq7ltVuxYKTA77kQd3H103Uh9RQ71j00NqtTFjJ4E6+19zYj9sDnHA+S\n" +
        "yREzMEpZunWQL0DGy02I6gmdQ0XfAgMBAAECgYEAkFVO0hc6V1a9edLW5VrI76Oa\n" +
        "1C8g7yRQMfQ0zZbHBJ0EwKI+PYL/uc8HuRfPTpo3U1JLE6voL9SaftiJ32/7nyJv\n" +
        "5ij6Yy+aX2q93oU9Y+9AZ9ottynY5X2pDwhVtw87ESa/zSGVjq+6fkc9+3FsmnKi\n" +
        "XCbyKN2d0RAITaMyQpECQQDXnAwdSzFubmLyoKoRsMiNckvGH6lDjykvjbhBkTCy\n" +
        "E8AVkxI0F9Kk5UTMLqCJyd1D7tCQuLkWu4IT+cZoA6oVAkEAzAR+MKm5kNT28Jzm\n" +
        "JqX0i2nX3SR1LLbf+oKqM2X21z4XJVIbZH9iTlYpwU9ctvENfMl26p5r3HzXb8xY\n" +
        "UqExIwJBAJGqntCnvYTDVVxgyaXcDxLpFmKLf3riXMwA7mx14DVffJXW4CSLt8eq\n" +
        "Efn0wod092VvEj/EXWALXM2MIcyiNSUCQFlZhmKNkoWJn3SVYn5+o/ECs9VYCDFD\n" +
        "DijKXPwRpd9yg/SGVxTWbRldxv+wYCyGuZ9zJC9wnlB8JGYEGpJlof0CQQCg2wrN\n" +
        "iXhlPca0KboggdqThdESAdpINS5lq4ZhZDpIlUY7HmZCG/VdXXPnd4U4JAsBJhS6\n" +
        "uglcCks44QIDM9D6";

密钥可分为1024,2048,4096等位密钥,位数不同,可加解密明文长度不一。 比如1024位密钥: 可加解密明文长度 len = 1024/8 - 11 = 117字节。

### 使用命令行生成RSA公钥私钥 在Linux环境下,可以使用`openssl`来生成RSA公钥私钥对。具体操作如下: 通过终端执行以下命令创建一个2048位的RSA私钥并保存至文件`rsa_private_key.pem`: ```bash openssl genpkey -algorithm RSA -out rsa_private_key.pem -pkeyopt rsa_keygen_bits:2048 ``` 接着,基于上述生成私钥提取对应的公钥,并将其存储于名为`rsa_public_key.pem`的文件内[^1]: ```bash openssl rsa -pubout -in rsa_private_key.pem -out rsa_public_key.pem ``` 以上两步即完成了RSA密钥对的生成过程。 ### 利用编程语言生成RSA公钥私钥 #### PHP 实现方式 PHP提供了内置函数支持RSA密钥对的生成工作。下面是一段简单的代码片段用于展示如何完成这一任务: ```php <?php // 创建配置参数数组 $config = array( "digest_alg" => "sha512", "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); // 生成资源句柄 $resPrivateKey = openssl_pkey_new($config); if (false === $resPrivateKey) { throw new Exception('Failed to generate private key'); } // 导出私钥到字符串变量中 $privKeyStr = ''; $success = openssl_pkey_export($privKeyStr); if (!$success || empty($privKeyStr)) { throw new Exception('Failed to export private key'); } file_put_contents('rsa_private_key_php.pem', $privKeyStr); // 将私钥写入文件 // 获取公开部分的信息结构体 $pkeyDetails = openssl_pkey_get_details($resPrivateKey); if (!isset($pkeyDetails['key'])) { throw new Exception('Could not get public key from the generated pair.'); } file_put_contents('rsa_public_key_php.pem', $pkeyDetails['key']); // 把公钥存入文件 ?> ``` 这段脚本首先定义了一个包含所需选项的配置数组,之后调用了`openssl_pkey_new()`函数根据给定设置创建新的密钥对对象;再利用`openssl_pkey_export()`导出了私钥内容,并最终获取到了整个密钥对中的公钥信息以便后续处理[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长乐smile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值