溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP中如何實(shí)現(xiàn)RSA加解密算法

發(fā)布時(shí)間:2021-06-03 11:25:08 來源:億速云 閱讀:237 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹PHP中如何實(shí)現(xiàn)RSA加解密算法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

大家可以先到http://web.chacuo.net/netrsakeypair這個(gè)網(wǎng)站,在線生成公鑰和私鑰

RSA非對(duì)稱加密算法,如果是公鑰加密,就得用私鑰解密,反過來也一樣,私鑰加密的就用公鑰解密,以下是相關(guān)實(shí)現(xiàn)函數(shù)

/**
 * RSA私鑰加密
 * @param string $private_key 私鑰
 * @param string $data 要加密的字符串
 * @return string $encrypted 返回加密后的字符串
 */
function privateEncrypt($private_key,$data){
 $encrypted = '';
 $pi_key = openssl_pkey_get_private($private_key);//這個(gè)函數(shù)可用來判斷私鑰是否是可用的,可用返回資源id Resource id
 //最大允許加密長(zhǎng)度為117,得分段加密
 $plainData = str_split($data, 100);//生成密鑰位數(shù) 1024 bit key
 foreach($plainData as $chunk){
  $partialEncrypted = '';
  $encryptionOk = openssl_private_encrypt($chunk,$partialEncrypted,$pi_key);//私鑰加密
  if($encryptionOk === false){
   return false;
  }
  $encrypted .= $partialEncrypted;
 }
 
 $encrypted = base64_encode($encrypted);//加密后的內(nèi)容通常含有特殊字符,需要編碼轉(zhuǎn)換下,在網(wǎng)絡(luò)間通過url傳輸時(shí)要注意base64編碼是否是url安全的
 return $encrypted;
}
/**
 * RSA公鑰解密(私鑰加密的內(nèi)容通過公鑰可以解密出來)
 * @param string $public_key 公鑰
 * @param string $data 私鑰加密后的字符串
 * @return string $decrypted 返回解密后的字符串
 */
function publicDecrypt($public_key,$data){
 $decrypted = '';
 $pu_key = openssl_pkey_get_public($public_key);//這個(gè)函數(shù)可用來判斷公鑰是否是可用的
 $plainData = str_split(base64_decode($data), 128);//生成密鑰位數(shù) 1024 bit key
 foreach($plainData as $chunk){
  $str = '';
  $decryptionOk = openssl_public_decrypt($chunk,$str,$pu_key);//公鑰解密
  if($decryptionOk === false){
   return false;
  }
  $decrypted .= $str;
 }
 return $decrypted;
}
//RSA公鑰加密
function publicEncrypt($public_key,$data){
 $encrypted = '';
 $pu_key = openssl_pkey_get_public($public_key);
 $plainData = str_split($data, 100);
 foreach($plainData as $chunk){
  $partialEncrypted = '';
  $encryptionOk = openssl_public_encrypt($chunk,$partialEncrypted,$pu_key);//公鑰加密
  if($encryptionOk === false){
   return false;
  }
  $encrypted .= $partialEncrypted;
 }
 $encrypted = base64_encode($encrypted);
 return $encrypted;
}
//RSA私鑰解密
function privateDecrypt($private_key,$data){
 $decrypted = '';
 $pi_key = openssl_pkey_get_private($private_key);
 $plainData = str_split(base64_decode($data), 128); 
 foreach($plainData as $chunk){
  $str = '';
  $decryptionOk = openssl_private_decrypt($chunk,$str,$pi_key);//私鑰解密
  if($decryptionOk === false){
   return false;
  }
  $decrypted .= $str;
 }
 return $decrypted;
}

以上是“PHP中如何實(shí)現(xiàn)RSA加解密算法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI