Java加密解密相关名词(概念)解释(RSA、AES)

      公司要在传输过程中对数据进行加密,想使用一种通用标准、简单、方便,且支持多种开发开发语言的方法。最后选择了目前经常看见的密钥方式。
      之前使用过,但是对密钥概念、原理了解的不深入(头疼),在预研过程中走了不少弯路(各中语言实现的不同)。写完代码后把结果整理了一下,希望对后来需要的学习的同学有所帮助。建议先了看一下名词解释在看代码。不然功能是实现了但是却不知道为什么是这样。
密钥:一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的数据。密钥分为两种:对称密钥与非对称密钥。
对称密钥加密:又称私钥加密或会话密钥加密算法,即信息的发送方和接收方使用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。以DES算法为例,由于密钥长度的不满足,衍生除了DeSede算法(也称为TripleDES或3DES算法,翻译成中文是“三重DES”算法)。为了替代DES算法又有了AES(Rijndael)算法。此外,还有RC系列算法,包含了RC2、RC4以及针对32位/64位计算机的RC5算法(细分为RC5-32和RC5-64,分别应对32位和64位计算机)。
      对称加密算法中,DES算法最具代表性;DESede是DES算法的变种;AES算法则作为DES算法的替代者。
DES(Data Encryption Standard,数据加密标准)是一种对称加密算法,很可能是使用最广泛的密钥系统, DES算法密钥偏短,迭代次数偏少,且具有半公开性质,现在已经退出历史舞台,AES算法成为了它的替代者。
AES(Advanced Encryption Standard,高级数据加密标准),AES算法因密钥建立时间短、敏捷性好、内存需求低等优点,在各个领域得到了广泛的研究与应用。目前,AES常用于UMTS(Universal Mobile Telecommunications System,通用移动通信系统)。基于SSH(Secure Shell,安全外壳)协议的一些软件也是用了AES算法。 AES算法的Java实现细节:
算法 密钥长度 密钥长度默认值 工作模式 填充方式 备注
AES 128、192、256 128 ECB、CBC、 PCBC、CTR、 CTS、CFB、 CFB8至CFB128、 OFB、OFB8至OFB128 NoPadding、 PKCS5Padding、 ISO10126Padding Java实现若使用256位密钥需要获得无政策限制文件
非对称密钥加密系统:又称公钥密钥加密。它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。RSA算法是最为典型的非对称加密算法,也是当今应用范围最为广泛的非对称加密算法,已经成为非对称加密算法国际标准,也是第一个能用于数据加密也能用于数字签名的算法。我们熟知的电子邮件加密软件PGP就是采用RSA算法对数据进行加密/解密和数字签名处理的。 RSA算法的Java实现细节:
算法 密钥长度 密钥长度默认值 工作模式 填充方式 备注
RSA 512~65536位 (密钥长度必须是64的倍数) 1024 ECB NoPadding、 PKCS1Padding、 OAEPWITHMD5AndMGF1Padding、 OAEPWITHSHA1AndMGF1Padding、 OAEPWITHSHA256AndMGF1Padding、 OAEPWITHSHA384AndMGF1Padding、 OAEPWITHSHA512AndMGF1Padding、 JAVA实现
数字证书(Digital Certificate):具备常规加密/解密必要的信息,包含签名算法,可用于网络数据加密/解密交互,标识网络用户(计算机)身份。数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载体。依靠数字证书,我们可以构建一个简单的加密网络应用平台。       数字证书中最为常用的非对称加密算法是RSA算法,与之配套使用的签名算法是SHA1withRSA算法,而最为常用的消息摘要算法是SHA1。算法除了使用RSA算法外,我们还可以使用DSA算法。只是使用DSA算法无法完成加密/解密实现,即这样的数字证书不包括数据加密/解密功能。       数字证书有多种文件编码格式,主要包含CER编码、DER编码等:
CER(Canonical Encoding Rules,规范编码格式)是数字证书的一种编码格式,它是BER(Basic Encoding Rules,基本编码格式)的一个变种,比BER规定得更严格。
DER(Distinguished Encoding Rule,卓越编码格式)同样是BER的一个变种,与CER的不同之处在于:DER使用定长模式,而CER使用变长模式。所有证书都符合公钥基础设施(PKI)制定的ITU-T X509国际标准(X.509标准),目前共包含3个版本。
X.509 :X.500协议的子集,在X.500确保用户名称惟一性的基础上,X.509为X.500用户名称提供了通信实体的鉴别机制,并规定了实体鉴别过程中广泛适用的证书语法和数据接口。X.509证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发 者名称、证书有效期等信息。这一标准的最新版本是X.509 v3,它定义了包含扩展信息的数字证书。该版数字证书提供了一个扩展信息字段,用来提供更多 的灵活性及特殊应用环境下所需的信息传送。 X.500(Directory Access Protocol - DAP) :由 ITU-T (X.500) 和 ISO (ISO/IEC 9594)定义的目录访问协议,提供一种方法,开发一个组织中的成员电子目录,使得世界各地具有因特网访问权限的任何人都可以访问作为全球目录一部分的该目录。
PKCS(Public-Key Cryptography Standards,公钥加密标准)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。到1999年底,PKCS已经公布了以下标准:
版本 名称 简介
PKCS #1 2.1 RSA密码编译标准 RSA Cryptography Standard 定义了RSA的数理基础、公/私钥格式,以及加/解密、签/验章的流程。1.5版本曾经遭到攻击。
PKCS #2 ~ 撤销 原本是用以规范RSA加密摘要的转换方式,现已被纳入PKCS#1之中。
PKCS #3 1.4 DH金钥协议标准 Diffie-Hellman key agreement Standard 规范以DH金钥协议为基础的金钥协议标准。其功能,可以让两方透过金议协议,拟定一把会议金钥(Session key)。
PKCS #4 ~ 撤销 原本用以规范转换RSA金钥的流程。已被纳入PKCS#1之中。
PKCS #5 2.0 密码基植加密标准 Password-based Encryption Standard 参见RFC 2898与PBKDF2。
PKCS #6 1.5 证书扩展语法标准 Extended-Certificate Syntax Standard 将原本X.509的证书格式标准加以扩充。
PKCS #7 1.5 密码讯息语法标准 Cryptographic Message Syntax Standard 参见RFC 2315。规范了以公开金钥基础设施(PKI)所产生之签章/密文之格式。其目的一样是为了拓展数位证书的应用。其中,包含了S/MIME与CMS。
PKCS #8 1.2 私钥讯息表示标准 Private-Key Information Syntax Standard Apache读取证书私钥的标准。
PKCS #9 2.0 选择属性格式 Selected Attribute Types 定义PKCS#6、7、8、10的选择属性格式。
PKCS #10 1.7 证书申请标准 Certification Request Standard 参见RFC 2986。规范了向证书中心申请证书之CSR(certificate signing request)的格式。
PKCS #11 2.2 密码装置标准接口 Cryptographic Token Interface (Cryptoki) 定义了密码装置的应用程式接口(API)之规格。
PKCS #12 1.0 个人信息交换标准 Personal Information Exchange Syntax Standard 定义了包含私钥与公钥证书(public key certificate)的文件格式。私钥采密码(password)保护。常见的PFX就履行了PKCS#12。
PKCS #13 ~ 椭圆曲线密码学标准 Elliptic curve cryptography Standard 制定中。规范以椭圆曲线密码学为基础所发展之密码技术应用。椭圆曲线密码学是新的密码学技术,其强度与效率皆比现行以指数运算为基础之密码学算法来的优秀。然而,该算法的应用尚不普及。
PKCS #14 ~ 拟乱数产生器标准 Pseudo-random Number Generation 制定中。规范拟乱数产生器的使用与设计。
PKCS #15 1.1 密码装置讯息格式标准 Cryptographic Token Information Format Standard 定义了密码设备内部数据的组织结构。