PHP 使用非對稱加密演算法(RSA)

2021-09-07 14:48:57 字數 2641 閱讀 3392

解釋:

非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。

公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;

如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。

因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。

使用場景:

php 為客戶端(android,ios)編寫api,對資料進行解密。

建立私鑰、公鑰:

openssl genrsa -out rsa_private_key.pem 1024

//生成原始 rsa私鑰檔案

openssl pkcs8 -topk8 -inform pem -in rsa_private_key.pem -outform pem -nocrypt -out private_key.pem

//將原始 rsa私鑰轉換為 pkcs8格式

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

//生成rsa公鑰

//我們將私鑰rsa_private_key.pem用在伺服器端,公鑰發放給android跟ios等前端。

服務端類庫:

class rsa     

/**

* 獲取公鑰

* @return bool|resource

*/

private static function getpublickey()

/**

* 私鑰加密

* @param string $data

* @return null|string

*/

public static function privencrypt($data = '')

return openssl_private_encrypt($data,$encrypted,self::getprivatekey()) ? base64_encode($encrypted) : null;

}

/**

* 公鑰加密

* @param string $data

* @return null|string

*/

public static function publicencrypt($data = '')

return openssl_public_encrypt($data,$encrypted,self::getpublickey()) ? base64_encode($encrypted) : null;

}

/**

* 私鑰解密

* @param string $encrypted

* @return null

*/

public static function privdecrypt($encrypted = '')

return (openssl_private_decrypt(base64_decode($encrypted), $decrypted, self::getprivatekey())) ? $decrypted : null;

}

/**

* 公鑰解密

* @param string $encrypted

* @return null

*/

public static function publicdecrypt($encrypted = '')

return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, self::getpublickey())) ? $decrypted : null;

}}

服務端使用:

require_once "rsa.php";

$rsa = new rsa();

$data['name'] = 'tom';

$data['age'] = '20';

$privencrypt = $rsa->privencrypt(json_encode($data));

echo '私鑰加密後:'.$privencrypt.'

';$publicdecrypt = $rsa->publicdecrypt($privencrypt);

echo '公鑰解密後:'.$publicdecrypt.'

';$publicencrypt = $rsa->publicencrypt(json_encode($data));

echo '公鑰加密後:'.$publicencrypt.'

';$privdecrypt = $rsa->privdecrypt($publicencrypt);

echo '私鑰解密後:'.$privdecrypt.'

';

PHP 使用非對稱加密演算法 RSA

解釋 非對稱加密演算法 需要兩個金鑰 公鑰 publickey 和私鑰 privatekey 公鑰與私鑰是一對,如果用公鑰對資料進行加密,只有用對應的私鑰才能解密 如果用私鑰對資料進行加密,那麼只有用對應的公鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。使用場...

PHP 使用非對稱加密演算法(RSA)

加密的型別 在日常設計及開發中,為確保資料傳輸和資料儲存的安全,可通過特定的演算法,將資料明文加密成複雜的密文。目前主流加密手段大致可分為單向加密和雙向加密。單向加密 通過對資料進行摘要計算生成密文,密文不可逆推還原。演算法代表 base64,md5,sha 雙向加密 與單向加密相反,可以把密文逆推...

RSA 非對稱加密演算法

1.對稱加密 甲方選擇某一種加密規則,對資訊進行加密 乙方使用同一種規則,對資訊進行解密。非對稱加密 乙方生成兩把金鑰 公鑰和私鑰 公鑰是公開的,任何人都可以獲得,私鑰則是保密的。甲方獲取乙方的公鑰,然後用它對資訊加密。乙方得到加密後的資訊,用私鑰解密。2.尤拉定理 rsa演算法的核心 可以大大簡化...