关于加解密、加签、验签等
目录
1.密码学常用术语:
2.加签、验签
3.私钥、公钥、证书
4.根据证书获取证书序列号等相关代码
为了确保数据传输和数据存储的安全,我们可以通过特定的算法,将数据明文加密成复杂的密文。
1.密码学常用术语:
- 明文:未加密的数据
- 密文:明文经过加密后的数据
- 加密:将明文转换为密文的过程
- 解密:将密文转换为明文的过程
- 加密算法:将明文转换为密文的转换算法
- 解密算法:将密文转换为明文的转换算法
- 加密密钥:用于加密算法进行加密操作的密钥,密钥分为对称密钥和非对称密钥
- 解密密钥:用于解密算法进行解密操作的密钥,密钥分为对称密钥和非对称密钥
- 密钥对:在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。
2.加签、验签
- 「加签」:用Hash函数把原始报文生成报文摘要,然后用私钥对这个摘要进行加密,就得到这个报文对应的数字签名。通常来说呢,请求方会把「数字签名和报文原文」一并发送给接收方。
- 「验签」:接收方拿到原始报文和数字签名后,用「同一个Hash函数」从报文中生成摘要A。另外,用对方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。
- 比如A和B都有一套自己的公钥和私钥,当A要给B发送消息时,先用B的公钥对消息加密,再对加密的消息使用A的私钥加签名,达到既不泄露也不被篡改,更能保证消息的安全性。
3.私钥、公钥、证书
- 私钥:解密、加签
- 机构向银联发送报文时,使用机构私钥做签名,银联收到报文后,使用机构公钥验签。
- 私钥:用来解密公钥加密的数据。
- 公钥:加密、验签
- 银联向机构发送报文时,使用银联私钥做签名,机构收到报文后,使用银联公钥验签。
-
公钥:公钥用来给数据加密,用公钥加密的数据只能使用私钥解密
- 证书:包含 公钥、公钥的主体、证书签发机构(CA)。用来保证公钥就是公钥主体的,防止公钥伪造的问题。
4.根据证书获取证书序列号等相关代码
// 1、加载公钥文件-读取公钥串
@Test
public void loadPublicCert() {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("d:\\zhengshu\\1111.cer");
CertificateFactory cff = CertificateFactory.getInstance("X.509","BC");
X509Certificate publicCert = (X509Certificate) cff.generateCertificate(inputStream);
System.out.println("证书序列号:" + publicCert.getSerialNumber().toString(16));
System.out.println("证书DN:" + publicCert.getSubjectDN());
System.out.println("证书有效日期(开始):" + publicCert.getNotBefore());
System.out.println("证书有效日期(截止):" + publicCert.getNotAfter());
System.out.println("公钥信息:" + Base64.toBase64String(publicCert.getEncoded()));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}