4W2H之加密簽名

what 什麼是加密和簽名

  加密,用某種特殊的方式對數據進行處理,使其餘人或者機器沒法正常處理。如經常使用的rsa非對稱加密,MD5,des和aes對稱加密等等。
  簽名,在傳輸數據前先對數據 'a' 進行處理獲得數據 ‘b’,這部分操做被稱爲簽名。而後將a 和 b發送給接受者,接受者得到數據後對數據 'b' 進行 解籤獲得數據 ‘c’,若是數據‘c’和數據‘a’同樣,則認爲數據沒有被修改。
  從上面的介紹中能夠看出,加密主要是用來使數據沒法被識別,而簽名主要是用來確保數據未被修改。安全

when 哪些場景使用

  在安全爲重中之重的支付領域,經常會採用加密和加簽的方式來確保數據的安全性。因爲RAS這種加密方式不容易被破解,所以一般使用它確保安全。
  RAS又被稱爲非對稱加密,擁有一個公鑰和一個私鑰,公鑰能夠交給對方,私鑰本身保存。公鑰用做加密使用,而私鑰用於簽名。
  首先,商戶會生成一對公私鑰,公鑰交給銀行。而銀行一樣也會將生成的公鑰交給商戶。商戶向銀行發送支付報文時,先用自身的私鑰對支付須要的參數進行簽名生成sign這個字段,接着將sign這個字段值和以前的參數用銀行的公鑰加密,接着經過某些傳輸協議發送給銀行。
  銀行獲得報文後,用自身的私鑰進行解密,若是不能解開,證實不是商戶發的。若是解密成功,再用商戶的公鑰對sign進行解籤,與數據進行對比判斷。app

why 爲何

爲何不用Des,Aes或者Md5。

  Des這些對稱加密,須要的是一個key。這些key在必定條件下能夠被暴力破解,MD5一樣也是如此。ui

爲何不用公鑰加簽,私鑰加密?

  假設用私鑰加密,公鑰加簽。那麼在商戶發給銀行的過程當中,銀行須要用公鑰解密,因爲公鑰是被暴露在外面的,若是被非銀行的人拿到,數據被解密後就能看到了,雖然他不能肯定這些數據有沒有被修改過。而若是用公鑰加密,私鑰是掌握在銀行手中。加密

where 哪些地方須要注意

  1. 不必定Md5只能用來加密,一樣能夠用來加簽。
  2. RAS雖然安全,可是會給開發帶來難度。

How to use

加簽

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方式進行加簽,在這邊應該能夠看出來加簽只是加密的一種運用。code

相關文章
相關標籤/搜索