Java加密解密和数字签名完整代码示例加密解密和数字签名完整代码示例
主要介绍了Java加密解密和数字签名完整代码示例,具有一定参考价值,需要的朋友可以了解下。
常见的加密算法常见的加密算法
基本的单向加密算法:
BASE64严格地说,属于编码格式,而非加密算法
MD5(MessageDigestalgorithm5,信息摘要算法)
SHA(SecureHashAlgorithm,安全散列算法)
HMAC(HashMessageAuthenticationCode,散列消息鉴别码)
复杂的对称加密(DES、PBE)、非对称加密算法:
DES(DataEncryptionStandard,数据加密算法)
PBE(Password-basedencryption,基于密码验证)
RSA(算法的名字以发明者的名字命名:RonRivest,AdiShamir和LeonardAdleman)
DH(Diffie-Hellman算法,密钥一致协议)
DSA(DigitalSignatureAlgorithm,数字签名)
ECC(EllipticCurvesCryptography,椭圆曲线密码编码学)
数字签名数字签名
算法简述
数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说,数字签名算法是非对称
加密算法和消息摘要算法的结合体。
特点
数字签名算法要求能够验证数据完整性、认证数据来源,并起到抗否认的作用。
原理
数字签名算法包含签名和验证两项操作,遵循私钥签名,公钥验证的方式。
签名时要使用私钥和待签名数据,验证时则需要公钥、签名值和待签名数据,其核心算法主要是消息摘要算法。
1. 消息摘要
String beforeDegist = "asdf";
System.out.println("摘要前:"+beforeDegist);
//初始信息要转换成字节流的形式
byte[] plainText = beforeDegist.getBytes("UTF8");
//使用getInstance("算法")来获得消息摘要,这里使用SHA-1的160位算法或者MD5算法
geDigest messageDigest = MessageDigest.getInstance("SHA-1");
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
System.out.println("/n" + messageDigest.getProvider().getInfo());
//开始使用算法
messageDigest.update(plainText);
//输出算法运算结果
String afterDegist = new String(messageDigest.digest(),"UTF8");
System.out.println("摘要后:"+afterDegist);
2. 私钥加密
/**
* 此例子是对一个字符串信息,用一个私钥(key)加密,然后在用该私钥解密,验证是否一致
* 私钥加密,是对称加密
* 使用对称算法。比如:A用一个密钥对一个文件加密,而B读取这个文件的话,则需要和A一样的密钥,双方共享一
* 个私钥(而在web环境下,私钥在传递时容易被侦听)
*
* 附:主要对称算法有:DES(实际密钥只用到56 位)
* AES(支持三种密钥长度:128、192、256位),通常首先128位,其他的还有DESede等
*/
<span style="white-space: pre; "> </span>String before = "asdf";
byte[] plainText = before.getBytes("UTF8");
// STEP 1.
System.out.println("Start generate AES key.");
//得到一个使用AES算法的KeyGenerator的实例
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
//定义密钥长度128位