加密的型別:
在日常設計及開發中,為確保資料傳輸和資料儲存的安全,可通過特定的演算法,將資料明文加密成複雜的密文。目前主流加密手段大致可分為單向加密和雙向加密。
單向加密:通過對資料進行摘要計算生成密文,密文不可逆推還原。演算法代表:base64,md5,sha;
雙向加密:與單向加密相反,可以把密文逆推還原成明文,雙向加密又分為對稱加密和非對稱加密。
對稱加密:指資料使用者必須擁有相同的金鑰才可以進行加密解密,就像彼此約定的一串暗號。演算法代表:des,3des,aes,idea,rc4,rc5;
非對稱加密:相對對稱加密而言,無需擁有同一組金鑰,非對稱加密是一種「資訊公開的金鑰交換協議」。非對稱加密需要公開金鑰和私有金鑰兩組金鑰,公開金鑰和私有金鑰是配對起來的,
也就是說使用公開金鑰進行資料加密,只有對應的私有金鑰才能解密。這兩個金鑰是數學相關,用某使用者金鑰加密後的密文,只能使用該使用者的加密金鑰才能解密。如果知道了其中乙個,並
不能計算出另外乙個。因此如果公開了一對金鑰中的乙個,並不會危害到另外乙個金鑰性質。這裡把公開的金鑰為公鑰,不公開的金鑰為私鑰。演算法代表:rsa,dsa。
偶然做版權輸入的時候遇到了rsa,在支付寶支付的時候也接觸過,當時不知道這是啥子,現在才知道。
他能保證,客戶端給出的資訊,只有擁有私鑰的伺服器才能看,其他人看的都是亂碼,嘿嘿。
非對稱加密演算法
需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。
公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;
如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。
因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。
注意以上的乙個點,公鑰加密的資料,只有對應的私鑰才能解密
在日常使用中是醬紫的:
將私鑰private_key.pem用在伺服器端,公鑰發放給android跟ios等前端
客戶端用公鑰加密過後,資料只能被擁有唯一私鑰的伺服器看懂。
具體實現:
1、加密解密的第一步是生成公鑰、私鑰對,私鑰加密的內容能通過公鑰解密(反過來亦可以)
a、openssl genrsa -out rsa_private_key.pem 1024
b、openssl pkcs8 -topk8 -inform pem -in rsa_private_key.pem -outform pem -nocrypt -out private_key.pem
c、openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
第一條命令生成原始 rsa私鑰檔案 rsa_private_key.pem
第二條命令將原始 rsa私鑰轉換為 pkcs8格式
第三條生成rsa公鑰 rsa_public_key.pem
上面幾個就可以看出:通過私鑰能生成對應的公鑰
2、php的加密解密類庫:
複製**
<?php
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;}
}
呼叫demo:
<?php
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
解釋 非對稱加密演算法 需要兩個金鑰 公鑰 publickey 和私鑰 privatekey 公鑰與私鑰是一對,如果用公鑰對資料進行加密,只有用對應的私鑰才能解密 如果用私鑰對資料進行加密,那麼只有用對應的公鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。使用場...
RSA 非對稱加密演算法
1.對稱加密 甲方選擇某一種加密規則,對資訊進行加密 乙方使用同一種規則,對資訊進行解密。非對稱加密 乙方生成兩把金鑰 公鑰和私鑰 公鑰是公開的,任何人都可以獲得,私鑰則是保密的。甲方獲取乙方的公鑰,然後用它對資訊加密。乙方得到加密後的資訊,用私鑰解密。2.尤拉定理 rsa演算法的核心 可以大大簡化...