`

java中的密钥Key接口及其相关类

    博客分类:
  • Key
Key 
阅读更多

在项目中使用到加密加签功能,记录一下:

涉及到加解密必然涉及到加密算法,加密格式,公私钥的编码字节等。

java中java.security.Key接口具有这三个方法:
	public String getAlgorithm();
    public String getFormat();
    public byte[] getEncoded();

 与这个Key密切相关的几个接口和类:

公钥接口PublicKey,私钥接口PrivateKey继承接口Key

不可变类KeyPair密钥对,

KeyPairGenerator类用来生成KeyPair密钥对,继承KeyPairGeneratorSpi这个抽象类.这个类有多个生成KeyPair密钥对的静态工厂方法,

KeyFactory类也可得到公私钥,比如此公钥兼容多种密钥规范,可根据不同的秘钥规范获取公钥值,比如javadoc中写到的例子:

byte[] signature ;
X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
 KeyFactory keyFactory = KeyFactory.getInstance("DSA");
 PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
 Signature sig = Signature.getInstance("DSA");
 sig.initVerify(bobPubKey);
 sig.update(data);
 sig.verify(signature);

  KeyRep类用于序列化证书的,其中主要的方法是:

 protected Object readResolve() throws ObjectStreamException

 这个方法可以返回:X509标准的公钥,PKCS #8标准的私钥,SecretKeySpec对象

KeySpec接口是一个空接口,包java.security.spec有多个类采用不同的加密算法(RSA,DSA)实现这个接口,也有不同的编码标准(X509,PKCS #8)。

加密解密主要使用到的几个类:

java.security.spec.X509EncodedKeySpec , java.security.spec.PKCS8EncodedKeySpec,

java.security.KeyStore .

在项目中使用的证书是用RSA算法,采用X509规范生成的1024位pfx证书,公钥是cer证书。

 在导出证书环节使用java平台规范的:

Every implementation of the Java platform is required to support the following standard KeyStore type:

  • PKCS12



 

可以使用这行代码读取PKCS格式的证书,存入KeyStore中:

KeyStore ks = KeyStore.getInstance("PKCS12"); //获取KeyStore实例
char[] password = getPassword();//获取证书密码的字节组
try (FileInputStream fis = new FileInputStream("filefolder/a.pfx")) {
    ks.load(fis, password);
}

KeyStore 的文档中,说明keystore 中的每个Entry是采用alias来识别的。

Each entry in a keystore is identified by an "alias" string. In the case of private keys and their associated certificate chains, these strings distinguish among the different ways in which the entity may authenticate itself. For example, the entity may authenticate itself using different certificate authorities, or using different public key algorithms. 

Enumeration<String> enumas =ks.aliases();
if(enumas.hasMoreElements()){
    String    keyAlias = (String) enumas.nextElement(); //获取证书Entry
}

 采用类keyStore的静态方法: 

public final Key getKey(String alias, char[] password) throws KeyStoreException, NoSuchAlgorithmException,UnrecoverableKeyException来获取私钥。

可通过public final Certificate getCertificate(String alias)  throws KeyStoreException获取

 再使用Certificate 的getPublicKey()方法获取公钥,getPublicKey()的实现类是sun.security.x509.X509CertImpl,在jre/rt.jar里面,openjdk中可以看到源码,可以自己编译openjdk源码,也可在这个网站上看到:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/sun/security/x509/X509CertImpl.java#X509CertImpl.getPublicKey%28%29。到目前就扯完了Key的加载及获取公私钥的方法。

 

也可使用CertificateFactory这个类来获取Certificate,然后通过上文中Certificate的getPublicKey()方法获取公钥。使用姿势如下:

CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(new FileInputStream(file));
return cert.getPublicKey();

 

 

  • 大小: 52.8 KB
分享到:
评论

相关推荐

    java中的key接口解析

    Java中的`Key`接口是Java Cryptography Architecture (JCA) 的核心组件,它定义了所有密钥对象的通用功能。这个接口是所有密钥类型的顶级接口,...理解和正确使用`Key`接口及其相关类对于进行安全的Java编程至关重要。

    java源码:Java生成密钥的实例.zip

    这里我们将深入探讨Java中生成密钥的相关知识点。 1. **Java Cryptography Architecture (JCA)** Java Cryptography Architecture(JCA)是Java平台提供的一套接口和类,用于实现加密、哈希和数字签名等密码学操作...

    Java中的Blowfish对称密钥加密算法类和实例

    Java中的Blowfish对称密钥加密算法是一种广泛使用的数据加密技术,特别是在网络通信和存储安全领域。Blowfish算法由Bruce Schneier在1993年设计,以其高效和安全著称。它属于对称密钥加密体系,这意味着加密和解密...

    JAVA_API1.6文档(中文)

    java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...

    java调用百度翻译接口简单实例

    在Java编程中,调用外部服务接口是一种常见的需求,例如集成第三方API来实现特定功能。本实例关注的是如何使用纯Java代码调用百度翻译API,无需依赖任何第三方库。这通常涉及网络请求、JSON解析以及对API规定的参数...

    百度搜索接口java后台

    在IT行业中,与“百度搜索接口java后台”相关的知识点涵盖了搜索引擎接口的使用、Java编程语言以及后台服务开发。本文将详细解析这些关键概念,并提供如何使用Java后台来对接百度搜索接口的方法。 首先,我们需要...

    GenerateKey.java EncryptClasses.java

    在给定的信息中,我们可以看到涉及的文件是与加密和解密相关的Java源代码。"GenerateKey.java"、"EncryptClasses.java"以及"Util"、"DecryptStart"这些标签暗示了这是一个关于Java加密和解密操作的项目。下面将详细...

    JAVA中RSA加密解密工具类

    在Java编程语言中,RSA(Rivest-Shamir-Adleman)是一种广泛使用的非对称加密算法,主要用于数据的加密和数字签名。...理解并正确使用RSA算法及其相关的Java API对于开发安全的网络应用程序至关重要。

    .net 与Java间RSA加密的转换

    本话题将深入探讨如何在.NET与Java间进行RSA加密的转换,以及涉及到的相关类。 RSA是一种非对称加密算法,它基于两个密钥:公钥和私钥。公钥可以公开,用于加密数据,而私钥则需要保密,用于解密数据。这种机制确保...

    java api最新7.0

    java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...

    java快递查询接口

    本篇文章将深入探讨如何使用Java来实现一个快递查询接口,以及涉及到的相关技术点。 首先,理解快递查询接口的核心功能是接收用户的快递单号,然后通过与快递公司的API进行交互,获取快递的最新动态信息,如包裹的...

    关于java安全的程序和文档.rar_java security_java 安全_key

    "The-Key-to-Security"项目旨在探讨Java安全机制,并提供了源代码和相关文档,帮助开发者深入理解Java安全模型。以下是这个主题中涵盖的一些关键知识点: 1. **Java安全模型**:Java的安全模型基于沙箱环境,它限制...

    Java 1.6 API 中文 New

    java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...

    java utils 工具类

    在Java中,加密主要依赖于Java Cryptography Extension (JCE) API,它提供了一系列的接口和类来实现对数据的加密和解密。`Encrypt.java`可能实现了其中的一些核心类和方法,如`Cipher`用于实际的加解密操作,`...

    使用google身份验证器实现动态密码验证java demo

    这个文件可能是包含Java代码示例、库依赖或其他相关资源的压缩包,用于演示如何在Java项目中集成Google身份验证器。 总结,使用Google身份验证器实现在Java中的动态密码验证,可以极大地提高用户账户的安全性,...

    java源码包---java 源码 大量 实例

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    java平台上的实现Diffle-Human的密钥交换

    最后,将生成的密钥存储到文件中,可以使用`java.io`包下的文件操作类,如`FileOutputStream`和`ObjectOutputStream`。 实习总结中,可能会涉及如何在实际项目中应用DH密钥交换,可能遇到的问题,以及如何调试和...

    基于Java的实例开发源码-Blowfish对称密钥加密算法类和实例.zip

    1. 导入必要的库:在Java中,我们可以使用`javax.crypto`包下的`Cipher`类来处理加密和解密操作。首先,需要导入`Cipher`、`KeySpec`、`SecretKeyFactory`以及`Blowfish`相关的类。 ```java import javax.crypto....

    Aes-javA.rar_AES_api接口aes

    在Java中,这些密钥可以通过`KeyGenerator`类实例化并初始化,例如: ```java KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(128); // 设置密钥长度为128位 SecretKey secretKey = keyGen....

Global site tag (gtag.js) - Google Analytics