首页 > 代码库 > php使用openssl加密数据
php使用openssl加密数据
1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: hanks 5 * Date: 6/2/2017 6 * Time: 6:03 PM 7 */ 8 //使用php函数生成密钥对 9 //openssl模块提供了很多openssl相关的函数,参考手册 生成密钥对的方法如下: 10 $privateKey = openssl_pkey_new([ 11 ‘private_key_bits‘ => 2048, // private key的大小 12 ‘private_key_type‘ => OPENSSL_KEYTYPE_RSA, 13 ]); 14 15 openssl_pkey_export_to_file($privateKey, ‘php-private.key‘); 16 $key = openssl_pkey_get_details($privateKey); 17 file_put_contents(‘php-public.key‘, $key[‘key‘]); 18 19 openssl_free_key($privateKey); // 释放资源
1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: hanks 5 * Date: 6/8/2017 6 * Time: 12:20 PM 7 */ 8 //使用密钥对加密数据 9 //使用第一步的php函数生成的公钥对一段明文进行分段(chunk)再分段加密,(实际使用中也可以直接全部文本加密): 10 //$plain = ‘this is a 测试的数据‘; 11 $plain = [ 12 0=>[ 13 ‘0‘=>‘sd‘, 14 ‘1‘=>‘使得‘ 15 ], 16 1=>[ 17 ‘0‘=>‘sd2‘, 18 ‘1‘=>‘使得2‘ 19 ], 20 ]; 21 echo ‘plian text: ‘ . json_encode($plain,true); 22 $plain = gzcompress(json_encode($plain,true)); // compress data 23 $pubkeyStr = file_get_contents(‘./php-public.key‘); 24 $publicKey = openssl_pkey_get_public($pubkeyStr); 25 26 $p_key = openssl_pkey_get_details($publicKey); 27 $chunkSize = ceil($p_key[‘bits‘] / 8) -11; // 这里不知道为什么要-11,后面追加解释 28 29 $output = ‘‘; 30 31 while ($plain) { 32 $chunk = substr($plain, 0, $chunkSize); 33 $plain = substr($plain, $chunkSize); 34 35 $encrypted = ‘‘; 36 if ( !openssl_public_encrypt($chunk, $encrypted, $publicKey)) { 37 die("failed to encrypt data"); 38 } 39 $output .= $encrypted; 40 } 41 openssl_free_key($publicKey); 42 $output = base64_encode($output); 43 echo ‘encrypted: ‘ . ($output); 44 file_put_contents(‘./enc.data‘, $output);
1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: hanks 5 * Date: 6/8/2017 6 * Time: 12:22 PM 7 */ 8 //解密数据 9 //使用私钥对数据进行解密: 10 $keyStr = file_get_contents(‘./php-private.key‘); 11 if (!$privateKey = openssl_pkey_get_private($keyStr)) { 12 die(‘get private key failed‘); 13 } 14 15 $encrypted = file_get_contents(‘./enc.data‘); 16 echo ‘encrypted data: ‘ . $encrypted; 17 18 $encrypted = base64_decode($encrypted); 19 20 $p_key = openssl_pkey_get_details($privateKey); 21 $chunkSize = ceil($p_key[‘bits‘] / 8); 22 $output = ‘‘; 23 24 while ($encrypted) { 25 $chunk = substr($encrypted, 0, $chunkSize); 26 $encrypted = substr($encrypted, $chunkSize); 27 $decryptd = ‘‘; 28 if (!openssl_private_decrypt($chunk, $decryptd, $privateKey)) { 29 die(‘failed to decrypt data‘); 30 } 31 $output .= $decryptd; 32 } 33 openssl_free_key($privateKey); 34 $output = gzuncompress($output); 35 echo "\ndecrypted data: "; 36 var_dump(json_decode($output,true));
php使用openssl加密数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。