1、签名认证是什么?

        数字签名是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

        在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户的数据建立自己的BI库,各系统、各平台间数据的传输和调用变得非常普遍且非常重要;那么作为开发人员,我们不但要防止系统被攻击被入侵,我们还要确保数据的安全和完整

  2、为什么要做签名认证?

        在使用http或者soap传输数据的时候,签名作为其中一个参数,可以起到关键作用:1、鉴权(通过客户的密钥,服务端的密钥匹配);2、数据防篡改(参数是明文传输,将参数及密钥加密作为签名与服务器匹配);下面来分析下具体的方式: 

        将请求参数中的各个键值对按照key的字符串顺序升序排列(大小写敏感),把key和value拼成一串之后最后加上密钥,组成key1value1key2value2PRIVATEKEY的格式,转成utf-8编码的字节序列后计算md5,作为请求的签名。计算出来的签名串应当全为小写形式。如果某个参数的值为空,则此参数不参与签名。 

  3、签名认证哪里会用到?

        最常见的使我们在开发接口的时候,为了不被非法访问,往往我们会做签名认证,比如支付接口......

        然后就是第三方平台的开发,比如微信公众平台......

   4、方式

# 基于简单密码
双方约定密码,密码正确验证通过

# 参数签名方式【实例:】
步骤通常如下:
①接口提供方给出appid和appsecret
②调用方根据appid和appsecret以及请求参数,按照一定算法生成签名sign
③接口提供方验证签名


生成签名的步骤如下:
①将所有业务请求参数按字母先后顺序排序
②参数名称和参数值链接成一个字符串A
③在字符串A的首尾加上appsecret组成一个新字符串B
④对字符串进行md5得到签名sign

假设请求的参数为:f=1,b=23,k=33,排序后为b=23,f=1,k=33,参数名和参数值链接后为b23f1k33,首尾加上appsecret后md5:md5(secretkey1value1key2value2...secret)。

# 带有时间戳的参数签名
 普通的参数签名如果被监听就可以一直调用,那么可以在签名的生成过程中增加一个时间戳.

 # Time-based One-time Password Algorithm(基于时间的一次性密码算法)


OTP是基于时间的一次性算法,客户端和服务器端约定秘钥,加入时间作为运算因子得到一个6位数字。客户端请求服务端时生成一个6位数字,服务端使用相同算法验证这个6位数字是否合法。
适用于小型的普通加密..