php rsa 加密,解密,簽名,驗簽詳解
php rsa 加密,解密,簽名,驗簽
由於對接第三方機構使用的是Java版本的rsa加解密方法,所有剛開始在網上搜到很多PHP版本的rsa加解密,但是對接java大多都不適用。
以下php版本是適用於對接java接口,java適用密鑰再php語言使用是需要添加
-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----
使用密鑰:
加密公鑰 public_key.cer
解密密鑰:
加密公鑰 public_key.cer解密鑰匙簽章私鑰sign_key.key驗簽公鑰verify.cer<?php class RSAUtils{ //加密公钥 function redPukey() { //拼接加密公钥路径 $encryptionKeyPath="D:/encryptions.cer"; $encryptionKey4Server = file_get_contents($encryptionKeyPath); $pem = chunk_split(base64_encode($encryptionKey4Server),64,"\n");//转换为pem格式的公钥 $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n"; $publicKey = openssl_pkey_get_public($pem); return $publicKey; } //解密私钥 function redPikey() { //拼接解密私钥路径 $decryptKeyPath="D:/decrypts.key"; $decryptKey4Server = file_get_contents($decryptKeyPath); $pem = chunk_split($decryptKey4Server,64,"\n");//转换为pem格式的私钥 $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n"; $privateKey = openssl_pkey_get_private($pem); return $privateKey; } //签名私钥 function redSignkey() { //拼接签名路径 $signKeyPath="D:/DEMO/sign.key"; $signKey4Server = file_get_contents($signKeyPath); $pem = chunk_split($signKey4Server,64,"\n");//转换为pem格式的私钥 $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n"; $signKey = openssl_pkey_get_private($pem); return $signKey; } //验签公钥 function redVerifykey() { //拼接验签路径 $verifyKeyPath="D:/DEMO/verify.cer"; $verifyKey4Server = file_get_contents($verifyKeyPath); $pem = chunk_split(base64_encode($verifyKey4Server),64,"\n");//转换为pem格式的公钥 $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n"; $verifyKey = openssl_pkey_get_public($pem); return $verifyKey; } //公钥加密 function pubkeyEncrypt($source_data, $pu_key) { $data = ""; $dataArray = str_split($source_data, 117); foreach ($dataArray as $value) { $encryptedTemp = ""; openssl_public_encrypt($value,$encryptedTemp,$pu_key);//公钥加密 $data .= base64_encode($encryptedTemp); } return $data; } //私钥解密 function pikeyDecrypt($eccryptData,$decryptKey) { $decrypted = ""; $decodeStr = base64_decode($eccryptData); $enArray = str_split($decodeStr, 256); foreach ($enArray as $va) { openssl_private_decrypt($va,$decryptedTemp,$decryptKey);//私钥解密 $decrypted .= $decryptedTemp; } return $decrypted; } } ?>
注意:有時候用base64_encode加密後,以GET的形式傳到其他頁面,解密用64_decode用64_encode 遇到這個問題的時候,我就納悶了,為什麼有一些能正確解密,但是有一些卻出現亂碼呢?後來經過檢查,發現有一些中文字符,用GET形式傳過來的時候,+號會被替換成空格.為了防止出現亂碼的情況,我做了一步替換,然後再解密,果然,亂碼的問題,不復存在了!比如你以GET的形式傳過來一個oid變量,那麼解密還原的時候,先用+號替換空格.那麼輸出就正常了.
如下: $oid=base64_decode(str_replace("
","+",$_GET[oid]));

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

Laravel優化Web開發流程的方法包括:1.使用路由系統管理URL結構;2.利用Blade模板引擎簡化視圖開發;3.通過隊列處理耗時任務;4.使用EloquentORM簡化數據庫操作;5.遵循最佳實踐提高代碼質量和可維護性。

在IIS上配置和運行PHP需要以下步驟:1)下載並安裝PHP,2)配置IIS並添加FastCGI模塊,3)創建並設置應用池,4)創建網站並綁定到應用池。通過這些步驟,你可以在Windows服務器上輕鬆部署PHP應用,並通過配置擴展和優化性能來提升應用的穩定性和效率。

HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。
