相关概念
加密
将明文(通过要先转换成byte[])通过特定的变换得到密文,目前常用的加密算法包括 对称加密的AES/DES,非对称加密的RSA/DSA/EC,加密很重要的一点就是解密,无论多复杂的数学变换,一定可以通过相应的逆变换得到原始输入(密文到明文),这是的加密行为才有意义。
hash(哈希变换)
hash值又称散列值或者消息摘要,对输入的字符串或者二进制序列通过一定的变换得到固定长度的输出
。常用的hash变换有MD5/SHA1/HmacSHA1/HmacMD5....
等,hash变换的目的并不是让输入不可读取,而是让输入不可改变(改变即可发现)。
字节变换
将不易读取或者不易传输的数据(通用是二进制数据byte)转成易读取或者易传输的字符串(String),常用的字节变换操作有Base64,UrlEncoder
。
相关api介绍
Cipher
主要用于加密行为,如进行AES/DES/RSA等加密行为。主要API有以下4步:
- 初始化对象
static Cipher getInstance(String transformation)
transformation
的组成可以概括为algorithm/mode/padding 即:加密的方式/变换模式/字节填充规则。常用有以下组合://括号数值为所需秘钥的长度 AES/CBC/NoPadding (128) AES/CBC/PKCS5Padding (128) AES/ECB/NoPadding (128) AES/ECB/PKCS5Padding (128) DES/CBC/NoPadding (56) DES/CBC/PKCS5Padding (56) DES/ECB/NoPadding (56) DES/ECB/PKCS5Padding (56) DESede/CBC/NoPadding (168) DESede/CBC/PKCS5Padding (168) DESede/ECB/NoPadding (168) DESede/ECB/PKCS5Padding (168) RSA/ECB/PKCS1Padding (1024, 2048) RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048) RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
- 初始化参数
void init(int opmode, Key key)
opmode用于指定该对象是要进行加密还是解密,
key`是加密所用的秘钥信息。 - 加密方法
byte[] doFinal(byte[] input)
Signature
signature类用于提供数字签名,用于保证数据的完整性。
获取方法:Signature signature = Signature.getInstance(algorithm),algorithm是数字签名算法,常用的算法有:
NONEwithRSA
MD2withRSA
MD5withRSA
SHA1withRSA
SHA224withRSA
SHA256withRSA
SHA384withRSA
SHA512withRSA
NONEwithDSA
SHA1withDSA
SHA224withDSA
SHA256withDSA
NONEwithECDSA
SHA1withECDSA
SHA224withECDSA
SHA256withECDSA
SHA384withECDSA
SHA512withECDSA
MessageDigest
MessageDigest`主要是做hash变换(也称消息摘要或者散列值)
常用方法:
// 参数可以是 MD5,MD2,MD5,SHA-1,SHA-224,SHA-256,SHA-384,SHA-512
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] bytes = messageDigest.digest("helloworld".getBytes());
//将二进制数组转成base64字符串输出
System.out.println("MD5哈希变换:" + byte2Base64(bytes));
KeyGenerator
用于生成秘钥,
KeyGenerator.getInstance(String algorithm)
支持的参数有:
AES (128)
DES (56)
DESede (168)
HmacSHA1
HmacSHA256
KeyPairGenerator
KeyPairGenerator用于生成一对密钥对,用于做非对称加密操作。
KeyPairGenerator.getInstance(String alorithm)
的可用参数为:
DSA
RSA
EC
Java-加密篇
Java加解-RSA加解密
Java加密-Signature数据签名
Java加密-AES加解密
Java加密-密钥的保存与获取