1 背景

当我们对外提供API时,因为API接口不需要经过权限验证,此时如何实现只提供给我们指定的使用方,这就引入了签名验证。

2 思路

使用MD5加密算法来实现,包括如下两步:

1. 在XxRequest中定义一个generateSign(String seed),可以根据transId+seed生产md5的值,然后赋值给XxRequest中成员变量sign。这个seed是我们双方一个约定的字符串。

2. 在控制器XxControler中定义一个verifySign(XxRequest reqeust)函数,函数实现思路:

  • 使用XxRequest#getnerateSign生产一个serverSign
  • 从XxRequest中获取一个clientSign;
  • 比较clientSign和serverSign来进行验证

3 实现

1. XxRequest中定义generaeSign方法

2. 在XxController中定义verifySign(XxRequest reqeust)函数

4 关于Md5

4.1 比较DigestUtils中md5和md5Hex

1. 源码中函数定义

2. 代码举例

(1)pom.xml

(2)代码

执行结果为

untitled

由上面执行结果可以看出md5和md5hex的区别为

  • md5生成是16位的byte[]
  • md5hex生成是32位字符串

4.2 MD5 是否唯一

答案:不唯一。

参考维基百科:https://zh.wikipedia.org/wiki/MD5

4.3  MD5是否可以解密

MD5加密原理是散列算法,散列算法也称哈希算法。

比如对于一个key,通过hash算法得到value,但是对于一个value是无法推出key的,因为不同的key对应同一个value。所以md5不能解密。

那么我们怎么验证密码呢?就是因为同一密码加密后一定相同。

5 MD5其他作用

1、验证文件完整性,可以对文件进行md5编码。

 

其他算法

加密算法之RSA

(全文完)

 

分类&标签