皮带猴的爷爷 發表於 2019-9-16 17:39:00

PHP实现RSA2加密

<p style="text-align: center"><span style="font-size: 18pt"><strong>PHP实现RSA2加密</strong></span></p>
<p>&nbsp;</p>
<p>1.</p>
<p>&nbsp;需要开启php的 php_openssl扩展</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">   * RSA2签名
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">   * @param array 请求的参数
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">   * @param string 私钥
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">   * returnstring
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">   * time 2019-09-11
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 128, 0, 1)">   * author chen
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 128, 0, 1)">   * email 869476711@qq.com
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>   <span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">function</span> RSA2(<span style="color: rgba(128, 0, 128, 1)">$data</span>,<span style="color: rgba(128, 0, 128, 1)">$pikey</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         
<span style="color: rgba(0, 128, 128, 1)">15</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将请求的参数进行排序</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>         <span style="color: rgba(0, 128, 128, 1)">ksort</span>(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">);//ksort()函数 根据参数的键进行升序排序
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         <span style="color: rgba(0, 128, 128, 1)">reset</span>(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(128, 0, 128, 1)">$signStr</span> = ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>         <span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$key</span> =&gt; <span style="color: rgba(128, 0, 128, 1)">$value</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">21</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$key</span> == 'sign' || <span style="color: rgba(128, 0, 128, 1)">$value</span> == '') <span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">22</span>             <span style="color: rgba(128, 0, 128, 1)">$signStr</span> .= <span style="color: rgba(128, 0, 128, 1)">$key</span> .'=' .<span style="color: rgba(128, 0, 128, 1)">$value</span> .'&amp;'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         <span style="color: rgba(128, 0, 128, 1)">$signStr</span> = <span style="color: rgba(0, 128, 128, 1)">substr</span>(<span style="color: rgba(128, 0, 128, 1)">$signStr</span>, 0, -1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">25</span>
<span style="color: rgba(0, 128, 128, 1)">26</span>
<span style="color: rgba(0, 128, 128, 1)">27</span>         <span style="color: rgba(128, 0, 128, 1)">$res</span> = "-----BEGIN RSA PRIVATE KEY-----\n" . <span style="color: rgba(0, 128, 128, 1)">wordwrap</span>(<span style="color: rgba(128, 0, 128, 1)">$pikey</span>, 64, "\n", <span style="color: rgba(0, 0, 255, 1)">true</span>) . "\n-----END RSA PRIVATE KEY-----"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">28</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 请注意密钥 是不是有带   -----BEGIN RSA PRIVATE KEY-----   -----END RSA PRIVATE KEY-----</span>
<span style="color: rgba(0, 128, 128, 1)">29</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>         <span style="color: rgba(128, 0, 128, 1)">$piKey</span> = openssl_pkey_get_private(<span style="color: rgba(128, 0, 128, 1)">$res</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">31</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$piKey</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">33</span>             <span style="color: rgba(128, 0, 128, 1)">$res</span> = openssl_get_privatekey(<span style="color: rgba(128, 0, 128, 1)">$res</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">34</span>             openssl_sign(<span style="color: rgba(128, 0, 128, 1)">$signStr</span>, <span style="color: rgba(128, 0, 128, 1)">$sign</span>, <span style="color: rgba(128, 0, 128, 1)">$res</span>, 'SHA256'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">35</span>             <span style="color: rgba(128, 0, 128, 1)">$sign</span> = <span style="color: rgba(0, 128, 128, 1)">base64_encode</span>(<span style="color: rgba(128, 0, 128, 1)">$sign</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">36</span>             openssl_free_key(<span style="color: rgba(128, 0, 128, 1)">$piKey</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">37</span>             <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$sign</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">39</span>   }</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/ccw869476711/p/11528550.html
頁: [1]
查看完整版本: PHP实现RSA2加密