1. 程式人生 > >javaWeb中RSA的加密使用

javaWeb中RSA的加密使用

java代碼 基於 utils component 理解 ice 加密 代碼 cnblogs

加密算法在各個網站運用很平常,今天整理代碼的時候看到了我們項目中運用了RSA加密,就了解了一下。

先簡單說一下RSA加密算法原理,RSA算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。

RSA的算法涉及三個參數,n、e1、e2。 其中,n是兩個大質數p、q的積,n的二進制表示時所占用的位數,就是所謂的密鑰長度。 e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n,e1),(n,e2)就是密鑰對。其中(n,e1)為公鑰
(n,e2)為私鑰。
RSAPublicKey rsap;
rsap = (RSAPublicKey) RSAUtil.getKeyPair().getPublic();
//
String module = rsap.getModulus().toString(16);
//公鑰指數
String empoent = rsap.getPublicExponent().toString(16);
request.setAttribute("m", module);
request.setAttribute("e", empoent);

這是java代碼,簡單來說就是將模和公鑰指數傳回到前臺頁面上,按我的理解module

就是上面所說的nempoent也就是上面說的e1

接著是Javascript的處理,先引入3個js文件RSA.js,BigInt.js,Barrett.js(網上可以隨便找到)

function doEncrypt(){
  var result = $("#password").val();
  setMaxDigits(130);
   //3個參數,分別是公鑰指數,私鑰指數,module  (一般module是1024位的長度,私鑰肯定是不會傳到前臺的)       
  key = new RSAKeyPair("12345","","12a3d32ad");
  //生成密文
  result = encryptedString(key, encodeURIComponent(result));
  $(
"#encrypt").attr("value", 1);   $("#pwd").attr("value", result); }

之後就把生成的公鑰生成的公鑰傳回去就行了。

RSAUtils.decryptByPrivateKey(mi, priKey);  

然後把傳回去的密文通過私鑰進行解密就行了,大致過程就是這樣。

javaWeb中RSA的加密使用