AS2协议详解(一)

在沃尔玛要求其供应商使用该协议之后,AS2(或Applicability Statement 2)快速流行起来。许多其他大型零售商也纷纷效仿,这意味着AS2迅速成为许多行业点对点连接的最流行EDI传输协议。

但是在国内,该协议使用的很少,资料也很稀缺,今天我把所学的知识整理一下,同时提供一个JAVA的实现版本,方便大家集成AS2。

数字摘要,加密,解密

在学习AS2协议之前,大家需要对基本的加密知识有所了解。

数字摘要

首先需要了解的是数字摘要,也叫数字指纹,数字签名,顾名思义,每段信息都有特定的指纹信息,就像人的指纹一样,通过指纹你就能确定人的身份。同理,通过数字指纹就能确定是哪一段信息。那这个有什么用呢?我们知道,网络传输是不安全的,比如你女朋友给你发消息,你怎么知道这段消息就是你女朋友发的?说不定是哪个骗子发的诈骗信息。或者你如何确定这段信息没被篡改过?说不定你的情敌在偷偷的篡改你们之间的通信来破坏你们间的感情。这时如果你女朋友通过某种算法根据这段信息生成一段数字摘要,然后随着这段信息发送给你,你通过比较原始信息和摘要是否能对应上,就能验证信息是否伪造,是否篡改了。

常见的摘要算法有MD5,SHA1,SHA256(也叫SHA2)。这几种算法安全性是递进的,耗时也是递进的。

MD5输出128bit,SHA1输出160bit,SHA256bit。

数字摘要的应用有签名,加密密码,校验文件是否损坏是否相同等。

数字摘要的缺点有两个,一个是会发生HASH碰撞,就是两段不同的信息会生成相同的指纹,虽然概率很低,MD5发生碰撞的概率为2的128次方之1,还有一个是会被暴力破解,比如使用字典记录所有信息和指纹的对应关系,就能通过指纹倒推原始信息,成本很高,但一些简单的信息都能查到。

对称加密

对称加密很容易理解,通过算法和秘钥对原文进行加密,得到密文,接受者拿到密文后再通过算法和秘钥进行解密,得到原文,这就是对称加密,对称加密的优点是简单,运算速度快,缺点是无法保证秘钥在传输过程中不被窃取,安全性不高。

常见的对称加密算法有DES,3DES,AES

DES是比较老的加密算法,已经不推荐使用了,3DES是DES的改进型,现在最常用的是AES

非对称加密

非对称加密的加密和解密用的不是同一个秘钥,它分为公钥和私钥,公钥加密私钥解密,或者私钥加密公钥解密,所以在使用非对称加密的时候需要和你的通信对象交换公钥,私钥自己保留,不对外开放,当你发送信息时使用自己的私钥加密后发送给对方,对方通过你的公钥解密,反之亦然。

常用的非对称加密算法是RSA。

非对称加密+对称加密

非对称加密的优点是安全性高,缺点是速度慢,对称加密的优点是速度快,缺点是安全性不高,有没有办法结合两方面的优缺点呢?答案当然是有的

比如使用RAS+3DES,首先随机生成3DES的秘钥,然后使用3DES加密你的内容,也就是长内容,再使用对方的公钥加密3DES的秘钥,也就是短内容,一起传输给对方,对方通过自己的私钥解密出3DES的秘钥,再通过3DES的秘钥解密长内容,是不是很巧妙。

生成证书库

要使用非对称加密,首先我们需要有证书,可以通过java的keytool工具来生成证书。

keytool -genkeypair -alias mykeystore -keyalg RSA -keysize 2048 -keypass mypassword -sigalg SHA256withRSA -dname "cn=www.justinqin.com,ou=justinqin,o=qjg,l=Shenzhen,st=Guangdong,c=CN" -validity 1095 -keystore D:/keys/mykeystore.keystore -storetype JKS -storepass mypassword

-genkeypair
非对称密钥(密钥对,私钥签名、公钥验签),对称密钥为-gendeskey(单个密钥)

-alias mykeystore
证书库别名为mykeystore

-keyalg RSA
加密算法为RSA,加密算法可以分为对称加密、不对称加密和不可逆加密算法
对称加密算法:加解密都用的同一把密钥,如DES、AES
不对称加密算法:使用密钥对即公钥、私钥进行加解密,如RSA SHS
不可逆加密算法:加密过程中不需要密钥,明文加密成密文后不可逆,如MD5
MD5、SHS的加密都是用了哈希加密算法

-keysize 2048
密钥长度,位数越大越安全,但同时加解密时间成正比增长

-keypass mypassword
私钥密码为mypassword

-sigalg SHA256withRSA
签名算法为SHA256withRSA
keyalg=RSA时,sigalg可选MD5withRSA、SHA1withRSA、SHA256withRSA、SHA384withRSA、SHA512withRSA
keyalg=DSA时,sigalg可选SHA1withDSA、SHA256withDSA

 -dname "cn=www.justinqin.com,ou=justinqin,o=qjg,l=Shenzhen,st=Guangdong,c=CN"
证书相关信息
CN=名字与姓氏/域名
OU=组织单位名称
O=组织名称
L=城市或区域名称
ST=州或省份名称
C=单位的两字母国家代码

-keystore D:/keys/mykeystore.keystore
生成的证书库文件为mykeystore.keystore,存储位置D:/keys/

-validity 1095
证书有效天数为3年=1095

-storetype JKS
证书库类型为JKS,JDK1.9以前默认JKS,JDK1.9及以后默认PKCS12

-storepass mypassword
证书库密码为mypassword

这个就是生成证书库的命令,既然是是库,说明可以包含多个证书,通过别名来区分,当从证书库中取证书时,需要知道别名,证书库的密码,当取私钥时还需要私钥的密码

导出公钥

keytool -export -alias mykeystore -keystore D:/keys/mykeystore.keystore -storepass mypassword -file D:/keys/publickey.cer

这个公钥需要给通信对象,这样对方就能解密你发送的密文了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值