現實網路中,web應用的開發少不了需要對敏感資訊來進行加密,但是加密又不能草草了事,過於簡單。一旦被鑽了空子,就成了事故。比如密碼。
之前用到了非對稱加密沒做記錄,這次又用到了,所以記錄下來!
rsa是目前最有影響力的公鑰加密演算法,該演算法基於乙個十分簡單的數論事實:
將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰,即公鑰,而兩個大素數組合成私鑰。
公鑰是可發布的供任何人使用,私鑰則為自己所有,供解密之用。
流程:解密者擁有私鑰,並且將由私鑰計算生成的公鑰發布給加密者。加密都使用公鑰進行加密,並將密文傳送到解密者,解密者用私鑰解密將密文解碼為明文。
舉例:以要把資訊發給乙為例,
首先確定角色:甲為加密者,乙為解密者。
首先由乙隨機確定乙個key,稱之為密匙,將這個key始終儲存在機器b中而不發出來;
然後,由這個 key計算出另乙個key,稱之為公匙。這個公鑰的特性是幾乎不可能通過它自身計算出生成它的私鑰。
接下來通過網路把這個公鑰傳給甲,甲收到公鑰後,利用公鑰對資訊加密(此處的加密不可逆),並把密文通過網路傳送到乙,
最後乙利用已知的私鑰,就對密文進行解碼了。
以上就是rsa演算法的工作流程。
**實現步驟:
一、 後台伺服器生成私鑰和公鑰,並且把公鑰傳給前台(渲染需要加密資訊的頁面之前):
/**
* 加密登入前置條件
以上**用到乙個rsa工具類,用以生成公鑰和私鑰。
org.bouncycastle
bcprov-jdk15on
1.47
二、前台頁面獲取後台傳的公鑰資訊(js)
rsautils.setmaxdigits(200);
var key = new rsautils.getkeypair("$", "", "$");
var password = $('input[name=password]').val();
//js裡面是反序的字串
var reversedpwd = password.split("").reverse().join("");
//加密後密碼
var encrypedpwd = rsautils.encryptedstring(key,reversedpwd);
三、 前台把加密後的密文傳遞給後台,後台解密
//解密後的密碼,password是提交過來的密碼
rsaprivatekey privatekey = (rsaprivatekey)request.getsession().getattribute(rsautils.ras_key_private);
string password = rsautils.decryptbyprivatekey(password, privatekey);
以上就是整個實現的過程!有問題請指正。
RSA非對稱加密
對稱加密 演算法 在加密和解密時使用的是同乙個秘鑰 而 非對稱加密演算法 需要兩個 金鑰 來進行加密和解密,這兩個秘鑰是 公開金鑰 public key,簡稱公鑰 和私有金鑰 private key,簡稱私鑰 與對稱加密 演算法 不同,非對稱加密演算法 需要兩個 金鑰 公開金鑰 publickey ...
RSA非對稱加密
非對稱加密就是加密和解密使用的不是乙個金鑰,使用的是公鑰 私鑰,乙個加密,另外乙個解密,一般都是私鑰加密,公鑰解密 首先使用keypair獲取我們的公鑰和私鑰,配對獲取,獲取的秘鑰可以直接是物件,也可以獲取位元組陣列 如果我們使用現有的公鑰和私鑰,需要使用keyfacktory來講秘鑰轉換為響應的物...
非對稱加密RSA
生成長度為1024位的rsa私鑰 openssl genrsa out rsa private key.pem 1024 通過rsa私鑰生成rsa公鑰 openssl rsa in rsa private key.pem pubout out public.pem 使用rsa公鑰加密檔案 opens...