/** * JCA(Java加密框架):Digest、Signature、Key、Cert、Alogorithm, 不论是Digest、Signature、Key、Cert,都要使用到算法Algorithm。 * * 1)MessageDigest:对消息进行hash算法生成固定长度消息摘要(digest)。由一个单向Hash加密函数对消息进行作用而产生 消息摘要服务其实就是使用hash算法将一段消息(可以是字符串、文件内容、html等)进行计算生成的一个byte[]。常用加密算法MD5、SHA、SHA-1其实都是hash算法。 消息摘要有两个基本属性:两个不同的报文难以生成相同的摘要,难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要(不可逆) 消息摘要算法包括MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)、MAC(Message AuthenticationCode,消息认证码算法)共3大系列 2)Signature:数字签名算法是"非对称加密算法"和"消息摘要算法"的结合体。 是信息发送者(就是只有信息的发送者才能产生的别人无法伪造的一段数字串)将“用其私钥对明文信息的特征数据(或称消息摘要)进行 RSA 算法操作”生成Sign+明文信息一起发送给收件人, 作用:以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在经签名后末被篡改(即完整性)。 当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。 3)KeyPairGenerator:根据指定的非对称算法生成配对的公钥、私钥。 4)KeyGenerator 根据指定的对称算法生成秘钥 5)KeyFactory:根据Key说明(KeySpec)生成公钥或者私钥。 6)KeyStore:keystore是一个keys的数据库。Keystore中的私钥会有一个相关联的证书链,《证书用于鉴定对应的公钥》。一个keystore也包含其它的信任的实体。 一个KeyStore是一个key、cert的库,里面存储了PrivateKey, Aliases, Certs. 7)SecretKeySpec 秘钥描述规格说明书 8)Padding: 数据长度:AES和DES在ECB或者CBC模式下,要加密的数据必须是分组长度的整数倍,如果不是那么就需要填充(pad)。 密钥长度:密钥长度是固定的。AES有三种:128、192、256bit pad的方式有很多种:PKCS7Padding:用十六进制0x07来填充7;Public Key Cryptography Standard 填充方式:用等于填充字节数量的值作为填充值进行填充。 9)SecureRandom:用于生成随机数或者伪随机数。 */ /** * 通信“明文加密传输API”常用的流程: * 1.先用“对称加密秘钥”对“明文文件”进行加密(对称算法加密速度快,明文文件比较大); * 2.用“非对称publicKey”对“对称加密秘钥”进行加密;(非对称算法加密速度慢,对称秘钥文件小) * 3.用“非对称PrivateKey”对“对称加密秘钥”进行解密; * 4.用“对称加密秘钥”对“明文文件”进行解密。 */ /** * 通信API数据安全验证常用的做法: * 1.先用RSA生成公钥私钥对,私钥保留,公钥分发 * 2.用RSA私钥+消息摘要算法(eg:MD5WithRSA)生成Sign * 3.Sign+明文发送给接受者(明文需要加密可参考上) * 4.接受者对Sign用RSA公钥解密生成“原消息摘要A”,用明文生成新的“消息摘要B” * 5.AB进行对比 */ /** * 公司APP相关API验证方式 * 1.对每个APP生成appKey+appSecret,必将这两个数据发送给API调用方。 * 2.我方用appKey + appSecret + APIData进行MD5,并截取8-24位作为signA * 3.明文+signA,一起传输 * 4.调用发用同样的方式,生成signB,验证接口正确性 * */
JAVA加密签名JCA
猜你喜欢
转载自renjieguixiong5.iteye.com/blog/2412286
今日推荐
周排行