解釋
「非對稱加密演算法」需要兩個金鑰:公鑰(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演算法的核心 可以大大簡化...