RSA
非對稱加密,
MD5
,
DES
和
AES
對稱加密等等。
A
進行處理獲得數據
B
,而後將
A
和
B
發送給接受者,接受者得到數據後對數據
B
進行 解籤獲得數據
C
,若是數據
C
和數據
A
同樣,則認爲數據沒有被修改。
在安全爲重中之重的支付領域,經常會採用加密和加簽的方式來確保數據的安全性。因爲RAS這種加密方式不容易被破解,所以一般使用它保證數據安全。
RAS又被稱爲非對稱加密,擁有一個公鑰和一個私鑰,公鑰能夠交給對方,私鑰本身保存。公鑰用做加密使用,而私鑰用於簽名。
首先,商戶會生成一對公私鑰,公鑰交給銀行。而銀行一樣也會將生成的公鑰交給商戶。商戶向銀行發送支付報文時,先用自身的私鑰對支付須要的參數進行簽名生成sign這個字段,接着將sign這個字段值和以前的參數用銀行的公鑰加密,接着經過某些傳輸協議發送給銀行。
銀行獲得報文後,用自身的私鑰進行解密,若是不能解開,證實不是商戶發的。若是解密成功,再用商戶的公鑰對sign進行解籤,與數據進行對比判斷。安全
Des這些對稱加密,須要的是一個key。這些key在必定條件下能夠被暴力破解,MD5一樣也是如此。bash
假設用私鑰加密,公鑰加簽。那麼在商戶發給銀行的過程當中,銀行須要用公鑰解密,因爲公鑰是被暴露在外面的,若是被非銀行的人拿到,數據被解密後就能看到了,雖然他不能肯定這些數據有沒有被修改過。而若是用公鑰加密,私鑰是掌握在銀行手中。app
Map<String,String> map=new HashMap<>();
map.put("client_id", AppConstant.APPID);
map.put("method","user.baseinfo");
map.put("access_token",accessToken);
map.put("timestamp",String.valueOf(System.currentTimeMillis()));
map.put("client_secret",AppConstant.APPSECRET);
String sign= MD5.md5Sign(map);
map.put("sign",sign);
/**md5加簽**/
public static String md5Sign(Map<String,String> params){
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
// 第二步:把全部參數名和參數值串在一塊兒
StringBuilder query = new StringBuilder();
for (String key : keys) {
String value = params.get(key);
query.append(key).append(value);
}
// 第三步:md5加密
return DigestUtils.md5Hex(query.toString());
}
複製代碼
這段代碼用的是md5方式進行加簽,在這邊應該能夠看出來加簽只是加密的一種運用,所以任何一種加密方式均可以用作簽名。ide
附上答案:小火龍被訓練家拋棄的那段。不過是劇場版:《就決定是你了》
裏的場景。 猛戳我,連接哦。不知道你們有沒有看過,仍是很好看的,我大皮神開口講話了!!!ui