在Java中使用消息摘要
java.security.MessageDigest
- getInstance() 创建对象
- update() 将输入的数据转换成消息摘要,本方法可以对非常大的数据进行杂凑,数据最长可达到2的64次方位,具体长度取决于底层的算法
- digest() 返回字节数组形式的杂凑结果。如果只有少量的数据需要进行杂凑处理,可以直接将数据传送给digest(),因为该方法可以选择地对一个字节数组进行杂凑处理
消息摘要流
- DigestInputStream 消息摘要输入流
- DigestOutputStream 消息摘要输出流
消息认证码(MAC)
javax.crypto.Mac
- getInstance() 创建对象
- init() 使用密钥进行初始化
- update() 将数据字节传给MAC,产生消息认证码
- doFinal() 返回MAC码
在Java中使用数字签名
java.security.Signature
- getInstance() 创建对象
- initSign()和initVerify() 初始化签名对象,具体用哪一个取决于你是要进行签名,还是要进行验证
- update() 将数据传送给它。如果要签名,就将待签名的数据传送给它;如果要验证签名,就把待验证的数据传送给它
- sign() 如果正在进行签名,该方法就会返回用方法update()传送给签名对象的数据的签名结果
- verify() 如果是要验证数据而不是签名,则要调用该方法,它会返回一个布尔值,以表明签名是否有效
在Java中使用证书
java.security.cert.Certificate
- getPublicKey() 返回证书主体的公钥
- verify() 验证证书的签名。它要求你输入证书发布者的公钥
java.security.cert.X509Certificate
java.security.cert.CertificateFactory
Keystore
java.security.KeyStore
在Java中,keystore用于收集密钥和证书。keystore通常存放在文件中,但是它可以存放在其他媒介中,如数据库或者LDAP服务器。在keystore中有两种类型的实体:
- 可信证书——指的是你相信它是由证书的宣称者所签署的证书。可信证书的一个例子就是CA。
- 密钥——指的是可以用于数字签名或者加密的私钥或者对称密钥。在keystore中存放的密钥必须与该密钥的证书相对应。这不是可信证书,只是简单的包含拥有私钥的主题。
Keytool
keytool是JDK所带的一个程序。它管理keystore,而且可以产生证书。下面逐个介绍每个选项:
- -certreq——证书产生请求,用于请求CA签署一个证书。
- -delete——从keystore中删除一个实体。
- -export——从keystore中输出一个DER编码的证书。通过添加-rfc选项,就可以添加BASE64编码。注意,无法用此选项输出私钥。
- -genkey——产生密钥对以及自签名的证书。可以用-keyalg指定使用的算法,如-keyalg RSA。
- -help——显示使用keytool时可能的选项。
- -identitydb——转换JDK1.1的身份数据库为Java2型的keystore。
- -import——向keystore中输入新的证书。这一选项对于向一已经存在的别名添加新的证书和已经签署的证书非常有用。
- -keyclone——在keystore中拷贝实体。
- -keypassword——修改保护别名的口令。
- -list——列出数据库中所有的别名
- -printcert——显示证书。
- -selfcert——产生一个自签名的证书。
- -storepassword——修改keystore的口令。
-v选项指定任何命令使用的verbose模式,-keystore选项让你可以指定想要打开的文件。
java.security.cert.X509CRL
创建自己的CA
sun.security.X509.*
- X509CertImpl 提供X.509证书的底层实现。我们可以用这个类来创建新的证书,它提供了签发证书的方法sign()。
- X509CertInfo 对存放在X.509证书中的内容进行封装。这允许我们为新证书设置一些新的属性。
- X500Name 描述X.500名字。
- AlgorithmId 描述密码算法。
- CertificateSubjectName 主体的X.500名字。
- CertificateValidity 证书的有效期。
- CertificateSerialNumber 描述证书的序列号。对于给定的CA,这个序列号应该是惟一确定的。
- CertificateIssuerName 证书发布者的X.500名字。
- CertificateAlgorithmId 用于签署证书的算法ID号。
分享到:
相关推荐
在实际应用中,这些国密算法和相关功能通常会结合使用,例如,使用SM2生成公私钥对,用SM3计算消息的哈希值,然后用SM2的私钥进行数字签名,最后用SM2的公钥和SM3的哈希值验证签名。同时,数字证书可以用来封装和...
Java 数字签名与数字证书是安全领域中的重要概念,它们在软件开发中起着至关重要的作用,尤其是在确保数据完整性和身份验证方面。本资源包含的Java代码工具包提供了生成数字签名和数字证书的源码,这有助于开发者...
- **JCA (Java Cryptography Architecture)**:提供了加密框架,支持证书管理、数字签名、消息摘要等功能。 - **JCE (Java Cryptography Extension)**:扩展了JCA的功能,提供了更丰富的加密算法、密钥管理和消息...
首先,我们了解两个基础概念:消息摘要和消息验证码。消息摘要是一种算法,通过该算法对原始数据进行处理,生成一个固定长度的摘要值,类似于数据的“指纹”。这个摘要值对原始数据具有唯一性,任何对数据的微小改动...
4. 签名与证书:数字签名通常与X.509证书结合使用,证书包含公钥和颁发者的身份信息,确保公钥的来源可信。 三、示例代码 在学习过程中,通过编写实际的Java代码来练习加密和数字签名的使用,例如: - 创建一个简单...
5. 比较解密后的数字签名和重新计算的摘要是否一致,以验证数据的完整性和真实性。 #### 四、数字证书 **数字证书**是由可信的第三方机构(证书颁发机构,CA)颁发的一种电子文档,用于验证数字证书持有者身份的...
摘要:JAVA源码,系统相关,数字签名,数字证书 Java 数字签名、数字证书的相关实例。 关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名...
Java提供了`java.security`和`javax.xml.crypto`这两个包来支持XML数字签名的生成和验证。其中,`java.security`包包含了用于密钥管理、摘要计算和签名生成的基础类,而`javax.xml.crypto`则提供了XML加密和签名的...
数字签名的起源和发展与信息安全的日益重要性密切相关。随着计算机和网络技术的飞速进步,信息的安全问题成为社会关注的焦点。数字签名作为一种现代密码学技术,它的核心在于结合加密和哈希函数,提供了一种可靠的...
它结合了密钥和消息摘要,只有拥有正确密钥的接收者才能验证消息的完整性。消息验证码不仅检查数据未被篡改,还验证发送者的身份。在Java中,可以使用`Mac`类来生成和验证消息验证码。 3. **数字证书**:在Java中,...
在IT行业中,尤其是在网络安全和支付领域,数字签名技术扮演着至关重要的角色。本文将深入探讨“证书签名和验签Demo JAVA版”的相关知识点,主要关注RSA算法、SHA256withRSA签名方法以及它们在银联云闪付场景中的...
数字签名是公钥密码学的一个关键概念,它结合了非对称加密和消息摘要技术,用于验证消息的完整性和发送者的身份。在Java中,`java.security.Signature`类用于处理数字签名。以下是一个简单的RSA数字签名示例: ``...
在Java中,数字签名通常结合消息摘要(Message Digest)技术实现。消息摘要可以将任意长度的消息转换为固定长度的摘要值,这个值对原始数据极其敏感,任何微小的变化都会导致摘要的巨大差异,从而确保信息在传输过程...
5. 验证签名:接收方使用发送方的公钥解密数字签名,再对比解密后的哈希值与重新计算的消息摘要,以验证签名的完整性和消息的来源。 6. 处理证书链:如果包含证书链,还需要验证证书的有效性,确保它们由受信任的根...
在数字签名过程中核心的两个步骤就是产生签名信息和对签名信息的验证,产生签名就是消息发送方使用特定的签名算法将数据产生成消息摘要,同时使用私钥对其摘要进行加密,最后将加密后的密文和原始的数据一起发送。...
"基于Java的数据签名的...基于Java语言的数据签名技术的实现过程可以分为创建证书、使用JCE实现加密和解密、使用数字签名API实现数据签名等几个步骤。这种技术可以保证信息的完整性和真实性,防止信息被篡改和伪造。
数字签名是信息安全领域的一项重要技术,用于验证电子文件、消息或其他数字数据的完整性和来源。它利用公钥加密技术,确保了数据的不可伪造性和不可否认性。本文将深入解析数字签名的工作原理、其与SSL/TLS协议的...
`java.security.KeyPairGenerator` 用于生成密钥对,`java.security.MessageDigest` 用于生成摘要,`java.security.Signature` 类则提供了数字签名的加密和解密功能。 此外,这个项目可能还涉及到证书和证书颁发...