java加密解密

秘钥 Key,分为对称密钥和非对称密钥

对称秘钥  SecretKey,由KeyGenerator生成

非对 PrivateKey,PublicKey,由KeyPairGenerator生成

KeyFactory(SecretKeyFactory)也可生成秘钥,可以将秘钥转换为外部表示如字节数组,秘钥规范(Key Spec)等

一个KeySpec对应一个Key


KeyFactory  秘钥,秘钥规范转换

DSAPrivateKeySpec spec = xx;

KeyFactory kf = KeyFactory.getInstance("DSA");

PrivateKey pk = kf.generatePrivateKey(spec);


PrivateKey key = xx;

Class sp = Class.forName("java.security.spec.DSAPrivateKeySpec");

DSAPrivateKeySpec spec = (DSAPrivateKeySpec ) kf.getKeySpec(key, sp);


消息摘要算法

用于标识消息未被改写,主要有 MD,SHA,MAC三大系列算法

MAC算法相比MD,SHA,多了个密钥,MD,SHA可以防止明文被改写,但不能防止消息摘要也被改写

MAC解决了这个问题


对称加密算法

主要算法有AES,DES,DESede

Cipher cipher = Cipher.getInstance("DES")

cipher.init(Cipher.ENCRYT_MODE, key)

cipher.doFinal(data)


非对称加密算法

主要算法RSA

使用私钥加密的数据,需使用公钥解密

使用公钥加密的数据,需使用私钥解密

使用KeyPairGenerator产生密钥对,然后使用Cipher加解密


数字签名算法

主要算法 RSA, DSA, ECDSA

数字签名算法要求验证数据完整性,认证数据来源,并起到抗否认的作用

,其实现由消息摘要算法和非对称加密算法结合而成

消息摘要用于验证数据完整性

非对称加密算法用于验证数据来源,抗否认

私钥用于签名,公钥用于验证


签名

Sinature sinature = Sinature.getInstance("MD5withRSA")

sinature.initSign(privateKey);

sinature.update(data)

byte[]sign = sinature.sign();


验证

Sinature sinature = Sinature.getInstance("MD5withRSA")

sinature.initVerify(publicKey)

sinature.update(data)   #这里的data和 签名的data是同一个对象

boolean status = sinature.verify(sign);


数字证书

数字证书包含了消息摘要算法,加解密算法,数字签名算法

密钥库 KeyStore

证书 X509Certificate







你可能感兴趣的:(java加密解密)