天天看點

PHP OpenSSL實作RSA加密解密(通java)

加密使用 公鑰, 解密使用 私鑰

簽名使用 私鑰, 驗證使用 公鑰

rsa加密的明文最大長度117位元組,解密要求密文最大長度為128位元組.待加密的位元組數不能超過密鑰的長度值除以8再減去11,而加密後得到密文的位元組數,正好是密鑰的長度值除以8。這個規定很狗血,是以就出現了分片加密,網上很流行這個版本.很簡單,如果明文長度大于那個最大明文長度了,我就分片吧,保證每片都别超過那個值就是了.http://blog.csdn.net/centralperk/article/details/8538697

PHP OpenSSL實作RSA加密解密(通java)

function splitdata($hexmacdatasource, $num = 16)  

{  

    $len = 0;  

    $len = strlen($hexmacdatasource) / $num;  

    $ds = array();  

    for ($i = 0; $i < $len; $i++) {  

        $ds[] = substr($hexmacdatasource, 0, $num);  

        $hexmacdatasource = substr($hexmacdatasource, $num);  

    }  

    return $ds;  

}   

win32使用者:為了在windows環境中能用openssl子產品,你必須從php/win32二進制包的dll檔案夾中複制libeay32.dll檔案到windows系統中的system32檔案夾中。

環境變量

PHP OpenSSL實作RSA加密解密(通java)

openssl_conf =d:\xampp\php\extras\openssl\openssl.cnf  

 phpseclib

PHP OpenSSL實作RSA加密解密(通java)

<?php  

include('crypt/rsa.php');  

$rsa = new crypt_rsa();  

//$rsa->createkey(); 生成公鑰和私鑰  

$rsa->loadkey(file_get_contents('privatekey.txt'));  

$rsa->setencryptionmode(crypt_rsa_encryption_pkcs1);  

echo $rsa->decrypt(file_get_contents('ciphertext.txt'));  

1.php需要開啟open_ssl.dll  必須安裝有有效的 openssl.cnf 以保證此函數正确運作

-days:證書過期時間,一定要加上這個參數,預設的證書過期時間是30天,一般我們不希望證書這麼短就過期,是以寫上比較合适的天數,例如這裡的3650(10年)。

事實上,這一行指令包含了好幾個步驟(我研究下面這些步驟的原因是我手頭已經由一個private_key.pem私鑰了,想直接用這個來生成x509證書,也就是用到了下面的2-3)

1)建立私鑰

PHP OpenSSL實作RSA加密解密(通java)

openssl genrsa -out private_key.pem 1024  

 2)建立證書請求(按照提示輸入資訊)

PHP OpenSSL實作RSA加密解密(通java)

openssl req -new -out cert.csr -key private_key.pem  

 3)自簽署根證書

PHP OpenSSL實作RSA加密解密(通java)

openssl x509 -req -in cert.csr -out public_key.der -outform der -signkey private_key.pem -days 3650  

android下的rsa

2)建立公鑰

PHP OpenSSL實作RSA加密解密(通java)

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

 3)将rsa私鑰轉換成 pkcs8 格式

PHP OpenSSL實作RSA加密解密(通java)

openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt    

 sdf

PHP OpenSSL實作RSA加密解密(通java)

rsa加密 [email protected]&username=1&password=123&confirm_password=123  

解密後再parse_str($params, $aparams);