本文執行個體講述了php基於openssl的rsa加密解密。分享給大家供大家參考,具體如下:
<?php$config = array(//"config" =>"D:/phpserver/Lighttpd/openssl.cnf",//'config' =>'D:/phpStudy/Lighttpd/OpenSSL.cnf','private_key_bits' => 1024, // Size of Key.'private_key_type' => OPENSSL_KEYTYPE_RSA);//$res = openssl_pkey_new();$res = openssl_pkey_new($config);// Get private key// openssl_pkey_export($res, $privkey, "PassPhrase number 1" );openssl_pkey_export($res, $privkey);var_dump($privkey);// Get public key$pubkey=openssl_pkey_get_details($res);// echo "------------><br />";// print_r($pubkey["rsa"]);// $bin_str=$pubkey["rsa"]["n"];// print_r($bin_str);// echo "<br />";// //echo $bin_hex_str = pack("H*" , bin2hex($bin_str));// echo $bin_hex_str = bin2hex($bin_str);// echo "<br />------------<<br />"; $pubkey=$pubkey["key"];// var_dump($privkey);// var_dump($pubkey);echo $privkey."<br /><br />";echo $pubkey."<br /><br />";?>
<?php$private_key = '-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQDNSQ4AmPZE01MpEO9dabRDsS0XwxKekEFUoWJneFG+NA6P52JsISw79QYNfQwM7akIaPpzU0+kkWjTSXiDqFUv5y2vaA3W2Tre5N51uCwUK6/LfzHXBg0d+Bnlzy6Kb6bpgPgvbhAkNbvjbCS0V9h4v3WUTLR9QauJ05Q8qe70sQIDAQABAoGAb/9aZ1MMkNImfbIilXk1AvVn353qy51yNyTxFfhbyISIKVSYqtuSUYfFbJh7eZYz8UWs1jxuqB847IUZ/eJZzpVev480Tv9YejN0DhJ4Yw6y/kpJWo/9kEcET6TkvatXh+wgmieszkxe0kUvk41GPV7a4GWWQj6P4vjx+qktaNECQQDuo7ENW10dZXLGYNKqUhgkdi9NPjRlHCgZ4RW0uoRqUsggqNVkaqpY8BaJOkkXWiQ0aVTPBiwo8k0+S50rGNYNAkEA3DgxY9OwRc65VqS/UxV28pyLe2gy0XSVwA97SVNvYJJ58iNGEvYsvEZ3GrTNAZpbPKcruCS6NiDK761Ot5A0NQJAOsRO1pY4QQP5lsbDOjRLQ7djAKef6YJckbrvSHliIHjQVdKd8kOePZaqRhL3auvE3K9Ptkez2kWJJh0i0DkmhQJBAMCmF+7wnWA0PEbj0MvqFyiechb/TJWXm/lskbnP17tv6GY/HWoxGWmLa15dlIo2cmJZDBIHby8y+NU7k4VaDZECQQCO018O5TJWl+O+bWyzV1eR603YP+JVjiSKUPtuyzVSNIz+ClwspGmdUwPWlLqr5JfKm+OfpaLIepfJinsCgwpP-----END RSA PRIVATE KEY-----';//$private_key ='-----BEGIN RSA PRIVATE KEY-----//MIICXAIBAAKBgQDVFOcE2nEBi+4FYvS36j1ShHHvusR0dXXe9NzAA/biH6NODywH//cQo2Lyco6oSvY+cSsPewjjyatRCtq/Ri6c/am64CJu+HM1lZH1Gh05C2KVJ2dveX//gcdsz+/XPHDxYKAq/hW9S1NeYr2x4eJdpYNYucLn8XWgeLRnlJUnBl/saQIDAQAB//AoGAK2oz28hKKB+DorNT2zktv2de85JhPr1EA+ZuJ+1m2xHJKzlqJiYBB6M53ltS//J446YZOPE/kXHgpwWIJlq9Wp1KiZPEfoRWzz1wmuj8koq95vcxBeuyjX4ez4Dio6//Vmr9BABFuoAh0GAq8kTJOz0DURCEcwv+iI7ILaNoRjPFWuUCQQDveqRLE2/N8NIy//P7YVnniAiaSL/e+XYQXCMIDsdEdqZNRjhjfDoBqpV/tGjnuAn9zBVHNNLbLni5nf//2nqgrh5jAkEA48gQmBO9koOnvO//Q581JSBKfga4i7DetQ80OD4kYt6fwezkaeHX//k64sjmpfD/Ys2heKFhyNDO/k0NsUxGlNwwJBAKPx7/u9qLLyBNSFrWALhy9oC5AT//Hi0iLNEOZ5R43lNGB+jCf/aa6uW357wb2wzpZDWuXOkfOfUuKv+HEKBj00UCQCxd//woWsiqcoB5rwcBrevr49fOTxMC7dQ3Omw3gU+odbb2iZWKAbAh9ctIcExwFX5MKS//BS5rXzne3AWmNnRPQnsCQDdOCBxkF5YctHqlmEETfKodVZG69COZGykdlenOxK6g//qNNAT2y2mxInYGlPIJ+TfxxFIqesHdph4s/lw6T2ISY=//-----END RSA PRIVATE KEY-----';$public_key = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNSQ4AmPZE01MpEO9dabRDsS0XwxKekEFUoWJneFG+NA6P52JsISw79QYNfQwM7akIaPpzU0+kkWjTSXiDqFUv5y2vaA3W2Tre5N51uCwUK6/LfzHXBg0d+Bnlzy6Kb6bpgPgvbhAkNbvjbCS0V9h4v3WUTLR9QauJ05Q8qe70sQIDAQAB-----END PUBLIC KEY-----';//$private_key=$privkey;//$public_key=$pubkey;$fp=fopen("private_key","w");fwrite($fp,$private_key);fclose($fp);$fp=fopen("public_key","w");fwrite($fp,$public_key);fclose($fp);//echo $private_key;$pi_key = openssl_pkey_get_private($private_key);//這個函數可用來判斷私密金鑰是否是可用的,可用返回資源id Resource id$pu_key = openssl_pkey_get_public($public_key);//這個函數可用來判斷公開金鑰是否是可用的print_r($pi_key);echo "\n";print_r($pu_key);echo "\n";echo "<br />----------------------<br />";$data = "woshizhu";//未經處理資料$encrypted = ""; $decrypted = "";echo "source data:",$data,"<br />";echo "private key encrypt:\n";openssl_private_encrypt($data,$encrypted,$pi_key);//私密金鑰加密$encrypted = base64_encode($encrypted);//加密後的內容通常含有特殊字元,需要編碼轉換下,在網路間通過url傳輸時要注意base64編碼是否是url安全的echo "<br />----------私密金鑰加密------------<br />";echo $encrypted,"<br />";echo "<br />----------私密金鑰加密------------<br />";echo "public key decrypt:\n";$decrypted="";openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私密金鑰加密的內容通過公開金鑰可用解密出來echo $decrypted,"\n";echo "---------------------------------------\n";echo "public key encrypt:\n";openssl_public_encrypt($data,$encrypted,$pu_key);//公開金鑰加密$encrypted = base64_encode($encrypted);echo $encrypted,"\n";$decrypted="";//$encrypted="JBeapcp9iWWYJYElgqtrZxfxM4wVkCaSn/oJZ7NjfR23o76fdbxEXpf+PGWACw3PeTdObwL4108wR3ihKmy2iYkIExGjBYyvx2w9aHies8ZsOIP3LjiMHYTm93Rr8Sc5XxHWQc3Dhbq16JWHYZ2d+RrOpHd4x84GF3JXwivrGO4=";echo "private key decrypt:\n";openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私密金鑰解密echo "--->:".$decrypted,"\n";?>
PS:關於加密解密感興趣的朋友還可以參考本站線上工具:
密碼安全性線上檢測:
http://tools.jb51.net/password/my_password_safe
高強度密碼產生器:
http://tools.jb51.net/password/CreateStrongPassword
MD5線上加密工具:
http://tools.jb51.net/password/CreateMD5Password
迅雷、快車、旋風URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder
線上散列/雜湊演算法加密工具:
http://tools.jb51.net/password/hash_encrypt
更多關於PHP相關內容可查看本站專題:《php加密方法總結》、《PHP運算與運算子用法總結》、《PHP網路編程技巧總結》、《PHP基本文法入門教程》、《php操作office文檔技巧總結(包括word,excel,access,ppt)》、《php日期與時間用法總結》、《php物件導向程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程式設計有所協助。