
密码系统是加密技术及其附带基础工具的实现,以提供信息安全服务。基本密码系统的各种组件是明文,加密算法,密文,解密算法,加密密钥和解密密钥。其中加密密钥和解密密钥是:
Java密码体系结构(JCA)是一组API,用于实现现代密码术的概念,如数字签名,消息摘要,证书,加密,密钥生成和管理,以及安全随机数生成等。
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
KeyPair pair = keyPairGen.generateKeyPair();
Signature sign = Signature.getInstance("SHA256withDSA");
sign.initSign(privKey);
//"Hello how are you"为代签名的内容,实际情况中会有很多内容
byte[] bytes = "Hello how are you".getBytes();
sign.update(bytes);
byte[] signature = sign.sign();
System.out.println("签名后的内容:"+new String(signature));
sign.initVerify(pair.getPublic());
sign.update(bytes);
boolean bool = sign.verify(signature);
-
- import java.security.*;
-
- public class SignDemo {
- public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
- //创建密钥对生成器,后面算法选择有: DiffieHellman,DSA,RSA 三种,如果是其他的话,就会抛出异常NoSuchAlgorithmException
- KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
-
- //初始化密钥对生成器,常用参数是长度,大于要加密内容的字节长度
- keyPairGen.initialize(2048);
-
- //生成密钥对(公钥和私钥)
- KeyPair pair = keyPairGen.generateKeyPair();
-
- //获取刚成成的密钥对中的私钥
- PrivateKey privKey = pair.getPrivate();
-
- //创建签名对象,后面的算法有3种,SHA1withDSA,SHA1withRSA,SHA256withRSA,如果不是上面3种之一,就会抛出异常NoSuchAlgorithmException
- Signature sign = Signature.getInstance("SHA256withDSA");
-
- //初始化签名
- sign.initSign(privKey);
- //"Hello how are you"为代签名的内容,实际情况中会有很多内容
- byte[] bytes = "Hello how are you".getBytes();
-
- //将需要签名的内容设置到签名对象中
- sign.update(bytes);
-
- //签名,返回签名后的内容
- byte[] signature = sign.sign();
- System.out.println("签名后的内容:"+new String(signature));
-
- //下面是验证签名的过程,实际情况中,应该是在不同的方法内
- //用公钥初始化签名验证过程
- sign.initVerify(pair.getPublic());
- //将明文(未签名的内容)设置到签名验证对象中
- sign.update(bytes);
-
- //验证签名
- boolean bool = sign.verify(signature);
-
- if(bool) {
- System.out.println("Signature verified");
- } else {
- System.out.println("Signature failed");
- }
- }
- }
注意和自己的实际场景结合使用