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

2021-09-25 23:46:18 字數 2805 閱讀 1388

解釋

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

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

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

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

使用場景

php 為客戶端 編寫api,對資料加/解密。

建立私鑰、公鑰

//生成原始 rsa私鑰檔案

openssl genrsa -out rsa_private_key.pem 1024

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

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

//生成rsa公鑰

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

//我們將私鑰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.'';

thanks ~

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

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

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

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

RSA 非對稱加密演算法

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