51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

PHP RSA加密解密,加密内容过长问题

RSA公钥私钥加密解密:

1024位的证书,加密时最大支持117 个字节,解密时为128

2048位的证书,加密时最大支持245 个字节,解密时为256

4096位的证书,加密时最大支持501 个字节,解密时为512

如使用2048位的证书,加密内容长度大于245的时候就会加密失败,这时候可以进行分段加密,解密的时候也进行分段解密。

PHP代码:

<?php
	header("Content-type: text/html; charset=utf-8");

    //RSA加密公钥
    $public_key='MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jo/nV70FxhkF+ohcOrPwKI1o+NUIPZ1wjZ6Rh9sL9pXT4+pWRpChgktx7UnK0BLt2oa6ySb4Y/NC928+u9J+POlYlFVggXJD3bP9My6rFnoFx3Z7epeKr/Dl/jrrRHcxlAgM8xwpbFlu2HRCBia43L1Tq7aJegdbh8H6JGiUaA3pq/WV8PaUFqHIu8fds7N2Vo4XpPNVGm/MAu9WaTVl68dQAASxGVeusAXxFsCNHhroSchQc33VszW6yAx9XINOI3n9QEEahK/E4mafcRCxf+Bb+uUnt+Xytb9hP71ltpoGUcymmOmzdsI7Tw+441B9Aog5ezuDtT62fo4lwj3cwIDAQAB';
    $public_key = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($public_key, 64, "\n", true) . "\n-----END PUBLIC KEY-----";

    //RSA加密私钥
    $private_key='MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDiOj+dXvQXGGQX6iFw6s/AojWj41Qg9nXCNnpGH2wv2ldPj6lZGkKGCS3HtScrQEu3ahrrJJvhj80L3bz670n486ViUVWCBckPds/0zLqsWegXHdnt6l4qv8OX+OutEdzGUCAzzHClsWW7YdEIGJrjcvVOrtol6B1uHwfokaJRoDemr9ZXw9pQWoci7x92zs3ZWjhek81Uab8wC71ZpNWXrx1AABLEZV66wBfEWwI0eGuhJyFBzfdWzNbrIDH1cg04jef1AQRqEr8TiZp9xELF/4Fv65Se35fK1v2E/vWW2mgZRzKaY6bN2wjtPD7jjUH0CiDl7O4O1PrZ+jiXCPdzAgMBAAECggEAZrcDwzQlp4bPi3wmitpSUahUqoDA5eaBORj7E3OY73E3S0xzG52srqbkPlSl4CFlP3XRmwoYLKXZ95VKBLU45OvbH3TGWi6+R2MusHt0FmUL19MZ68gJ0WcYK5w9hWsiznf65wnf65tMEXQsMHzbdoHvlzYUnjlxg1pbgOD+zggSLnRi9vYv7rsONKEbgdCLUJcbOoSFoDmVBqOPdoxvNva0o8tq2y47lk5Mkfo5m7KWq/ISUhs2AU4iSZRQ6D1ZBeoRFd5BbFhYuPtn3jkZR/UYnyKC/XmRp+bv4ChQlmCQ8ZCLGPp7MaZluaCOxiwcd46HxfcWmllp8w3eiyuIQQKBgQD0EilpR2BvsTO7BV9h8tnVRlPVaMLtqS7x8rrxhcbGOODpb18JJU+0fiySI1gwLol4By87Rd3g75WiW9c5OQFCO5RHxI6hD6sRVPFreYsV7pg3kgrepjyGN34ud0bQ8edUSN3k579qZq8B4OMP1UWo/oZTYZVzs3dlv5rf/oj1mQKBgQDtSNQM0NoDlKE7Rd2DVPt/8jm7j3BPF6wuuvQI0vk7N8x8MumpPfYMwc7cLQOvLjH32MzuYSJLotFy6z/L20FlIaINfHioS30ksxlus4zoJL5zx7BOu07MUtEnXaAMJ0Myfgw1xH0JrUIOsBEeesJ/s9zwVsEEuFmWgor34rYk6wKBgQCeZXsCnBP16KaN5Tq1som0Y+PcSBTZcEbLNqAkRpFt61Prqx+eK9zCYnBClzWQb2M/xkncycbpSBNwPvI6bMhoV4ov2VxHIof+w4W6HjMplKKszdbIEFKPOExnk3kd+SAMDw4SlGQhhWpmabByghKnTieWzWnUoNAH9IVqgSIZYQKBgQCLRU3A3+y2YUxo/87OQNkE9eVQ4xXmNlzHaM/HRh0m1s9crn1a6pU6U57YuEsLTS/i6wsNd1Gr1zrcGpvtSRmPBDibdc1T6krfeYeZ5CT2NGrchf5Dl8jeQFWmp1tDBuB4CGeeP1+siFbXTBwgKalzTtyE7EaKQLHEl4Z9jEGgVQKBgGiFTAa7VCgOouu3kek2Yi4jBSwCgH7uyGgNq8mkeNS/aHS7f4ZugTxH0ecfyzjmkFvwaE+nUgInGQ5h6MbprvKG1nZBQF67dLSeV70LbChXVtkLmMcBEmy5tfqJ3Jl/9qYIq9EcQYX53faI931XKdy/jbF/L0TY51KoGi4X4Xvv';
    $private_key = "-----BEGIN PRIVATE KEY-----\n" . wordwrap($private_key, 64, "\n", true) . "\n-----END PRIVATE KEY-----";




$str1='12346y6njk;4312346y6njk;434534dfgsdfsfwef$%wefr23\^#@r23r24534123412346y6njk;434534dfgsdfsfwef$%wefr23\^#@r23r26y6njk;434534dfgs12346y6njk;434534dfgsdfsfwef$%wefr23\^#@r23r2dfsfwef$%wefr23\^#@r23r2dfgsdfsfwef$%wefr23\^#@r23r234534dfgsdfsfwef$%wefr23\^#@r23r2dfsfwef$%wefr23\^#@r23r2dfgsdfsfwef$%wefr23\^#@r23r2';


    $str2 = publicEncrypt($public_key,$str1);
    echo '原内容:'.$str1.'&lt;br/&gt;';
    echo '加密后:'.$str2.'&lt;br/&gt;';
    echo '解密后:'.privateDecrypt($private_key,$str2).'&lt;br/&gt;';

    /**
    * 公钥加密
    */
    function publicEncrypt($public_key,$data){
        $crypto = '';
    	
    	if(strlen($data)&gt;245){
    		foreach (str_split($data, 245) as $chunk) {
    			openssl_public_encrypt($chunk, $encryptData, $public_key);
    			$crypto .= $encryptData;
    		}
    	}else{
    		openssl_public_encrypt($data, $crypto, $public_key);
    	}
        return base64_encode($crypto);
    }

    /**
    * 私钥解密
    */
    function privateDecrypt($private_key,$encryptstr) {
        // echo $encryptstr;exit;
        $encryptstr = base64_decode($encryptstr);
        $decrypted = array();
        $dataArray = str_split($encryptstr, 256);
        foreach($dataArray as $subData){
            $subDecrypted = null;
            openssl_private_decrypt($subData, $subDecrypted, $private_key);
            $decrypted[] = $subDecrypted;
        }
        $decrypted = implode('',$decrypted);
        return $decrypted;
    }</code></pre>



 
RSA加密解密在线工具:https://www.bejson.com/enc/rsa/

赞(0)
未经允许不得转载:工具盒子 » PHP RSA加密解密,加密内容过长问题