加密&签名

之前把支付渠道的代码重构,这样新接入支付渠道时要修改的地方集中和统一。不过这次要讲的不是代码重构,而是讲加密。现在有好多的第三方支付服务,支付服务是一个高安全的行为。在数据传输过程中都需要加密,不同的支付服务,加密方式也不一样。主要是通过对称加密、非对称加密、对称与非对称组合加密。还有就是数据的签名。下面就讲讲我对这些加密的理解

对称加密

对消息的加密和解密都是使用的同一个密钥的加密算法。常用的对称加密算法有:DES、3DES、AES等。现在使用最多的是AES

AES

AES是一种分组加密,即将明文分成N个分组,然后对每个分组进行加密。AES的密钥长度则可以是128,192或256比特。

AES 算法本身操作的都是 byte 字节数组,因此,加密后一般会使用 BASE64 编码将 byte 数组转为字符串,而解密之前则先用 BASE64 解码将字符串转回 byte 数组。这里注意下,不是所有的转换都是BASE64编码,也有转化成16进制,我在对接第三方支付时,他们没提供Demo,只是说了下AES加密。在联调时,一直报出解密失败。最后的原因是他们用十六进制,而我这边使用BASE64(满满的坑啊)

DES

DES是也是一个分组加密算法,他以64位为分组对数据加密。不过因为它使用的56位秘钥过短,以现代计算能力,24小时内即可能被破解。所以一般不考虑用这个加密方式了

非对称加密

加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥。公钥是公开的,而私钥是保密的。相比对称加密安全性提高了,但牺牲了性能,加解密的速度慢了几个数量级,消息越长,加密和解密的速度越慢

RSA

RSA加密算法是一种非对称加密算法。RSA被广泛使用(我接的第三方支付渠道用对称加密的都是用RSA)

RSA 加密填充方式主要有三种:NoPadding、PKCS1Padding、OAEPPadding。先说下什么是填充。RSA加密时会填充一些随机数。
用PKCS1Padding填充方式,会在明文签名填充11字节的随机数。因此,每一次对明文加密产生的密文都会不一样。如果想让每次产生的密文都一样,用NoPadding

  • 密钥长度越长越安全
  • 密钥长度越长越耗性能
  • 明文长度是不能超过密钥长度的

签名

将任意长度的信息转换为较短的固定长度的信息摘要,通常其长度要比信息小得多,且算法不可逆。用于计算出一段不可逆向计算的数值,以此来验证该文件是否被修改的。主要的算法有MD5、SHA

MD5

MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。这个有些问题存在:
1、一些不够复杂的密码难以防范彩虹表(预先用MD5逆运算好的表)
2、相同的密码,产生的MD5码一样。

为了应对以上两个问题,比较好的方案就是 MD5 + salt,也称MD5加盐,即将原密码拼上一串盐值salt之后再进行MD5。盐值salt是一个随机字符串,每个用户的 salt 值一般都是不同的,这样就可以保证不同用户最终 MD5 出来的散列值不一样,而且因为有一串随机字符串,彩虹表也很难发挥作用了

SHA

因为MD5存在上面连个问题,SHA是MD5的升级版。SHA加密时一个固定的密钥作为参数。就是相当于前面将的盐。共享密钥,所以这个密钥需要好好保存。

SHA有一系列如SHA-256、SHA-512等,后面的256、512是生成数据的长度256比特、512比特。

数字签名

指用户用私钥对原始数据的签名进行加密所得的数据。数字签名定义两种互补的运算:一个用于签名,另一个用于验证。"私钥签名,公钥验证"

签名:发送方先用签名算法对明文签名(签名后的摘要长度短小)。然后利用自己的私钥对形成的签名进行加密,这里加密后的数据就是数字签名。

验证:接受方利用发送方的公钥解密被加密的签名得到结果A,然后对明文也进行签名得到结果B.最后,把A和B作比较。此方式既可以保证发送方的身份正确性,又可以保证数据在传输过程中不会被篡改。

数字信封

数字信封的功能类似于普通信封。普通信封在法律的约束下保证只有收信人才能阅读信的内容;数字信封则采用密码技术保证了只有规定的接收人才能阅读信息的内容。

数字信封中采用了对称加密和非对称加密。信息发送者首先利用随机产生的【对称密码】加密信息(因为非对称加密技术的速度比较慢),再利用接收方的【公钥】加密对称密码,被公钥加密后的对称密钥被称之为数字信封。在传递信息时,信息接收方要解密信息时,必须先用自己的私钥解密数字信封,得到对称密码,才能利用对称密码解密所得到的信息。

数字信封既发挥了对称加密算法速度快、安全性好的优点,又发挥了非对称加密算法密钥管理方便的优点。

总结

如果让我来设计加密和签名的方式,我会用以下的方式:

  • 发送者A:
  1. A准备要传送的数字信息(明文)
  2. A对明文进行签名,得到一信息摘要。
  3. A用自己的【私钥(SK)】对信息摘要进行加密得到A的数字签名,并将其附在数字信息上。(数字签名)
  4. A随机产生一个加密钥(DES密钥),并用此密钥对要发送的信息(明文)进行加密,形成密文。(对称加密)
  5. A用B的【公钥(PK)】对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给B。(数字信封)
  • 接收者B:
  1. B收到A传送过来的密文和加过密的DES密钥,先用自己的私钥(SK)对加密的DES密钥进行解密,得到DES密钥。
  2. B然后用DES密钥对受到的密文进行解密,得到明文的数字信息,然后将DES密钥抛弃(即DES密钥作废)。
  3. B用A的公钥(PK)对A的数字签名进行解密,得到信息摘要。
  4. B用相同的has算法对收到的明文再进行一次hash运算,得到一个新的信息摘要。
  5. B将收到的信息摘要和新生成的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 互联网在为我们的生活带来极大便利的情况下,也引入了很多安全隐患。比如信息在网络传输过程中可能会被黑客截取并篡改,这...
    Mr萝卜阅读 1,156评论 1 9
  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 11,480评论 5 29
  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,369评论 0 6
  • 【“舒适区”其实是心灵的监狱】 “舒适区”其实并不舒适, 它只是让你感到习惯和熟悉, 让你有安全感的假相。 它其实...
    紫绮说CPA阅读 619评论 0 0
  • 在学习Flutter的过程中用到了ValueChange<T>这个方法,是用typedef修饰的一个方法。查阅了一...
    Swy2w阅读 5,660评论 2 0