javaWeb中RSA的加密使用
阿新 • • 發佈:2017-05-09
java代碼 基於 utils component 理解 ice 加密 代碼 cnblogs ,(n,e2)為私鑰。
就是上面所說的n,empoent也就是上面說的e1。
加密算法在各個網站運用很平常,今天整理代碼的時候看到了我們項目中運用了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)為公鑰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
接著是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的加密使用