zoukankan      html  css  js  c++  java
  • php格式化RSA公钥私钥字符串

    rsa公私钥加密解密以及验证相信大家都很熟悉了,如果提供的公私钥直接是pem文件格式的,【rsa_private_key.pem】和【rsa_public_key.pem】,内容是这样的

    那么我们直接使用以下方法即可

    1 $rsa_private_key = openssl_get_privatekey(file_get_contents('rsa_private_key.pem'));//获取私钥资源
    2 $rsa_public_key = openssl_get_publickey(file_get_contents('rsa_public_key.pem'));//获取公钥资源

    但是,如果我们得到的公私钥不是文件而是字符串呢,像这样的

    如果直接拿这种字符串去运行程序,则会报错不是正确的公私钥文件,所以我们就需要把字符串格式的公私钥做一下格式化处理才能正常使用,当然了有了第一种的用法,我们可以通过把字符串写入到文件然后再读取,但是感觉有点画蛇添足,下面使用一种新方法

     1 $pubPem = chunk_split($publicKey, 64, "
    ");
     2 $pubPem = "-----BEGIN PUBLIC KEY-----
    " . $pubPem . "-----END PUBLIC KEY-----
    ";
     3 var_dump($pubPem);
     4 
     5 // 验证公钥格式是否正确
     6 $pu_key = openssl_pkey_get_public($pubPem);
     7 if (!$pu_key) die('$pu_key 格式不正确');
     8 
     9 $priPem = chunk_split($privateKey, 64, "
    ");
    10 $priPem = "-----BEGIN PRIVATE KEY-----
    " . $priPem . "-----END PRIVATE KEY-----
    ";
    11 var_dump($priPem);
    12 
    13 // 验证私钥格式是否正确
    14 $pi_key = openssl_pkey_get_public($priPem);
    15 if (!$pi_key) die('$pi_key 格式不正确');

    不用生成pem文件,直接代码控制即可正常使用。

    如果需要把字符串的公私钥生成pem文件 ,可以参考如下方法,也可以直接将上面方法得到的$pubPem或者$priPem写入文件

     1 function setKeyPem ($keyStr, $type = 'public') {
     2     if ($type == 'private') {
     3         $begin_key = "-----BEGIN PRIVATE KEY-----
    ";
     4         $end_key = "-----END PRIVATE KEY-----
    ";
     5     } else {
     6         $begin_key = "-----BEGIN PUBLIC KEY-----
    ";
     7         $end_key = "-----END PUBLIC KEY-----
    ";
     8     }
     9 
    10     $filename = dirname(__FILE__) . "/rsaKey.pem";
    11     @chmod($filename, 0777);
    12     @unlink($filename);
    13 
    14     $fp = fopen($filename, 'ab');
    15     $len = fwrite($fp, $begin_key, strlen($begin_key));
    16 
    17     $raw = strlen($keyStr) / 64;
    18     $index = 0;
    19     $keyData = '';
    20     while ($index <= $raw) {
    21         $line = substr($keyStr, $index * 64, 64) . "
    ";
    22         if (strlen(trim($line)) > 0)
    23             $len += fwrite($fp, $line, strlen($line));
    24         $index++;
    25     }
    26     $len += fwrite($fp, $end_key, strlen($end_key));
    27     fclose($fp);
    28     return $len;
    29 }
    30
    31 $keyStr = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQulGSsEGYGuEEMbc7kgIDmOYGai3tdN3+QDKKq1AXhRLnnzJ204uSrb902CYX+4qQ2/Mbsve1TWhTPmj60+qoAlUYrmGRU6Q8fv9/fS9+dAJD2qP8/gj9cnf5D+NLsL7JioIMEkO1/dclZtpLulT429KTGo+QVCBumIRxRWdMLQIDAQAB";
    32 setKeyPem($keyStr);
  • 相关阅读:
    Linux ->> VirtualBox Linux虚拟机与Windows主机共享目录
    Linux ->> CentOS 7 执行service network restart 报错
    借助企业微信实现“调接口”给个人微信发消息
    idea提交代码到github教程
    Content type ‘multipart/form-data;boundary=--------------------------9107
    org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;bounda
    org.hibernate.LazyInitializationException: could not initialize proxy 解决方案(JPA)
    GitLab代码回滚到特定版本
    js 导入excel文件
    GoLand 2021.1.3安装之后需要激活得步骤
  • 原文地址:https://www.cnblogs.com/firstlady/p/11326963.html
Copyright © 2011-2022 走看看