加密算法理论

加密算法分为对称加密算法和非对称加密算法

1.对称加密

加密和解密使用同一把秘钥, 优点是算法简单,加密和解密的速度快, 缺点是和不同的贸易方需要维护不同的秘钥,管理较为困难,且不能用于数字签名。 一般常用的对称算法为 DES, AES, 3DES, AES目前在安全性上高于其他两个算法。

2.非对称加密

加密秘钥分为公钥和私钥, 公钥是可公开的,私钥由每个人自己保管,根据公开的公钥无法推算出解密私钥。可以用公钥加密, 私钥解密,也可以用私钥加密, 公钥解密。非对称算法的优点是足够安全,能够在分布式系统中使用。缺点是加密/解密速度较慢。 常用的非对称算法为 RSA, ECC

3.消息摘要

消息摘要也称散列函数,哈希函数,主要用来校验消息的完整性。和加密算法不同,经过摘要处理的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要不存在密码的管理和发布问题,适合于在分布式网络上使用。 一般常用的消息摘要算法为 MD2, MD4, MD5, SHA-1/256/383/512等。

4.数字签名

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

5.数字证书

数字证书颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您自己的数字证书。

一般的消息认证流程

一般https的通讯协议基础SSL,也都是这个原理,结合对称算法与非对称算法做认证,流程图:

JAVA与密码学包结构介绍

1.java 密码分为四部分:

JCA(java加密体系结构), JCE(java加密扩展包), JSSE(java套接字安全扩展包), JAAS( Java鉴别与安全服务)

  1. JCA: 提供基本的加密框架。
  2. JCE:在JCA上面做扩展
  3. JSSE: 提供了基于SSL的加密功能。
  4. JAAS: 在java平台上进行用户身份鉴别的功能。

2.包详解

java.security包: 1.Provider: 实现了java安全性的一部分或全部,我们称它为提供者。 2.Security: 管理java程序中所用到的提供者类。 3.MessageDigest: 实现了消息摘要算法.(后缀带有SPI,是引擎类的服务提供者,如MessageDigestSpi) 4.Key: 是所有密钥接口的顶层接口,一切与加密解密有关的操作都离不开key接口 SecretKey: 所有对称密钥顶层接口。 SecretKeySpec, 5.AlgorithmParameters: 是一个引擎类,它提供参数的不透明表示。 表示不能通过get方式访问每个值 AlgorithmParametersSpec 是加密参数的(透明)规范接口 6.AlgorithmParameterGenerator: 用于生成将在某个特定算法中使用的参数集合,我们把它称为算法生成器。 7.KeyPair: 是对非对称密钥的扩展,它是密钥对的载体,我们称它为密钥对。 8.KeyPairGenerator: 公钥和私钥的生成是由KeyPairGenerator类来实现的,我们称它为密钥对生生器。 9.KeyFactory: 也是用来生成密钥(公钥和私钥)的引擎类,密钥工厂。它的作用是通过密钥规范还原密钥。与KeyFacoty相对应的是SecretKeyFactory,这个类的作用是用来生成秘密密钥。 10.SecurityRandom: 起到强加密随机数生成器的作用。 11.Signature: 用来生成和验证数字签名。 12.Timestamp: 用于封装有关签署时间戳的信息,且它是不可更改的。它包括时间戳的日期和时间,以及有关生成和签署时间戳的(TSA)信息。为了区别于一般时间戳,我们称它为数字时间戳 13. CodeSigner: 封装了代码签名者的信息,且它是不可改变的,我们称它为代码签名。 14. KeyStore: 用来管理密钥和证书的存储。它提供一些相当完善的接口来访问和修改密钥仓库中的信息。密钥库类型不区分大小写。JKS是最好的选择。 javax.crypto包: 为加密操作提供类和接口 1. Mac: 不同于一般的消息摘要,必须有一个秘密密钥才能生成最终的消息摘要 2.Cipher: Cipher.getInstance(“DES/CBC/PKCS5Padding”) 格式是:算法/工作模式/填充模式