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

2021-09-29 14:01:27 字數 4088 閱讀 2541

加密的型別:

在日常設計及開發中,為確保資料傳輸和資料儲存的安全,可通過特定的演算法,將資料明文加密成複雜的密文。目前主流加密手段大致可分為單向加密和雙向加密。

單向加密:通過對資料進行摘要計算生成密文,密文不可逆推還原。演算法代表: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演算法的核心 可以大大簡化...