利用RSA對先後端加密的探索

RSA-JS-PHP

項目地址rsa-js-php

先後端交互時爲了保證信息安全可以使用RSA方式加密信息,在數據量大的時候可採用DES+RSA結合方式。 DEMO演示地址

一點歷史

1976年之前,全部的加密方法都是同一種模式:
(1)甲方選擇某一種加密規則,對信息進行加密;
(2)乙方使用同一種規則,對信息進行解密。因爲加密和解密使用一樣規則(簡稱"密鑰"),這被稱爲"對稱加密算法"(Symmetric-key algorithm)。
這種加密模式有一個最大弱點:甲方必須把加密規則告訴乙方,不然沒法解密。保存和傳遞密鑰,就成了最頭疼的問題。
1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種算法,能夠實現非對稱加密。這種算法用他們三我的的名字命名,叫作RSA算法。從那時直到如今,RSA算法一直是最廣爲使用的"非對稱加密算法"。絕不誇張地說,只要有計算機網絡的地方,就有RSA算法。php

算法原理

  • RSA算法的主要原理是利用了數論中質數的巧妙關係即歐拉定理,要實現RSA算法需找到三個具備特定關係的值,在此命名爲n e d;
  • 假設有兩個值互爲質數的正整數p和q,(爲了便於運算演示,取的值比較小,一般狀況下是取的很是大的值,值越大破解的難度越大),p=5 q=17 即 p和q的乘積爲n=5x17=85;
  • 計算得出n的歐拉函數φ(n)=(p-1)(q-1)=64,在區間(1,64)中隨機選擇一個數e=13,,需保證e和φ(n)爲互質關係;
  • 計算e對於φ(n)的模反元素d,得出d=5;至此,已經獲得了三個具備特定關係的值 n=85 e=13 d=5,設公鑰爲(n,e),私鑰即爲(n,d);
  • 假設用戶發送數字3到服務端,經過RSA加密的過程爲:m=(3^13) mod 85=63,mod爲求模,獲得密文63;
  • 服務端收到密文m=63,解密過程爲 s=(63^5) mod 85=3,最終得出原文爲3;
  • 加解密關係爲 m=(s^e) mod n,s=(m^d) mod n;私鑰與公鑰可互相使用,只須要保護一個不被泄露便可;
  • 因而私鑰泄露就意味着RSA加密失去意義;

使用方式

請確保PHP的openssl擴展開啓,且保證php在環境變量中,若是是windows需添加環境變量:名 OPENSSL_CONF,值 D:\http\php\extras\ssl\openssl.cnf(根據openssl.cnf目錄而定);
  • 生成新的公私鑰文件在項目根目錄命令行運行:
php rsa.php new
  • 保護好私鑰,確保私鑰不被暴露在web可訪問目錄下;
  • 將生成的rsa_pubkey.js引入值web項目中,具體請運行DEMO演示便可;
  • rsa.class.php的使用:
// 初始化參數,設置公鑰與私鑰的路徑
rsa::$prikey = 'src/key/private.pem';
rsa::$pubkey = 'src/key/public.pem';

// JavaScript腳本生成位置,用於從新生成公私鑰
rsa::$script = 'rsa_pubkey.js';

// $model = 1 公鑰加密,私鑰解密:公開公鑰,保存私鑰
// $model = 2 私鑰加密,公鑰解密:公開私鑰,保存公鑰
rsa::$model = 1;

// RSA加密
rsa::encrypt($data);

// RSA解密
rsa::decrypt($data);

// RSA簽名
rsa::sign($data);

// RSA驗籤
rsa::verify($data, $sign);
js加密來源於開源項目 jsencrypt

本文出自我的博客 最好的安排 轉載請註明出處!html

相關文章
相關標籤/搜索