"简单"的加密签名

  做为最受欢迎的御三家之一,想必你们对于小火龙仍是至关熟悉的,那么图片的这个场景发生在哪里呢?这个“秘密”就靠你们来破解了。答案将在结尾揭晓~~

什么是加密和签名

  加密,用某种特殊的方式对数据进行处理,使普通的接受者没法正常处理数据。如经常使用的 RSA非对称加密, MD5, DESAES对称加密等等。
  签名,在传输数据前先对数据 A 进行处理获得数据 B,而后将 AB 发送给接受者,接受者得到数据后对数据 B 进行 解签获得数据 C,若是数据 C和数据 A同样,则认为数据没有被修改。
  从上面的介绍中能够看出,加密主要是用来使数据没法被正确识别,而签名主要是用来确保数据未被修改。

哪些场景使用

  在安全为重中之重的支付领域,经常会采用加密和加签的方式来确保数据的安全性。因为RAS这种加密方式不容易被破解,所以一般使用它保证数据安全。
  RAS又被称为非对称加密,拥有一个公钥和一个私钥,公钥能够交给对方,私钥本身保存。公钥用做加密使用,而私钥用于签名。
  首先,商户会生成一对公私钥,公钥交给银行。而银行一样也会将生成的公钥交给商户。商户向银行发送支付报文时,先用自身的私钥对支付须要的参数进行签名生成sign这个字段,接着将sign这个字段值和以前的参数用银行的公钥加密,接着经过某些传输协议发送给银行。
  银行获得报文后,用自身的私钥进行解密,若是不能解开,证实不是商户发的。若是解密成功,再用商户的公钥对sign进行解签,与数据进行对比判断。安全

为何

为何不用Des,Aes或者Md5。

  Des这些对称加密,须要的是一个key。这些key在必定条件下能够被暴力破解,MD5一样也是如此。bash

为何不用公钥加签,私钥加密?

  假设用私钥加密,公钥加签。那么在商户发给银行的过程当中,银行须要用公钥解密,因为公钥是被暴露在外面的,若是被非银行的人拿到,数据被解密后就能看到了,虽然他不能肯定这些数据有没有被修改过。而若是用公钥加密,私钥是掌握在银行手中。app

哪些地方须要注意

  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方式进行加签,在这边应该能够看出来加签只是加密的一种运用,所以任何一种加密方式均可以用作签名。ide

结语

  本人昨天刚刚离职,多是更想去看看外面精彩的世界吧,和小智同样想要成为神奇宝贝大师~~~

   附上答案:小火龙被训练家抛弃的那段。不过是剧场版:《就决定是你了》 里的场景。 猛戳我,连接哦。不知道你们有没有看过,仍是很好看的,我大皮神开口讲话了!!!ui