哈Ha! 我向您介绍了Jakob Jenkov撰写的6、7和8篇文章的翻译, 这些文章是为那些希望学习Java密码学基础知识的初学者编写的。
目录:
- Java密码学
- Java密码
- 留言摘要
- Mac电脑
- 签章
- 密钥对
- 密钥生成器
- 密钥对生成器
- 密钥库
- 按键工具
- 证明书
- 证书工厂
- 证书路径
密钥对
KeyPair类( java.security.KeyPair )是一对非对称密钥(公共密钥+私有密钥)。 KeyPair实例通常用于非对称加密(数据加密或签名)中。 通常,KeyPair实例是从Java密钥库或KeyPairGenerator获得的,本文稍后将对此进行讨论。
公钥访问
您可以通过调用KeyPair实例的getPublic()方法来访问其公钥。 获取公共密钥的示例:
PublicKey publicKey = keyPair.getPublic();
私钥访问
您还可以通过调用其实例的getPrivate()方法来访问其实例的私钥。 这是获取私钥的示例:
PrivateKey privateKey = keyPair.getPrivate();
密钥生成器
KeyGenerator类( javax.crypto.KeyGenerator )用于生成对称加密密钥。 对称加密密钥是用于使用对称加密算法加密和解密数据的密钥。
创建KeyGenerator的实例
必须先创建KeyGenerator的实例,然后才能使用KeyGenerator类。 通过调用静态方法getInstance()来创建KeyGenerator实例,该实例作为一个参数,该参数采用为其创建密钥的加密算法的名称。 这是创建KeyGenerator实例的示例:
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
本示例创建一个KeyGenerator实例,该实例可以为AES加密算法生成密钥。
KeyGenerator初始化
创建KeyGenerator实例后,必须对其进行初始化。 实例的初始化是通过调用init()方法来完成的。 KeyGenerator实例初始化示例:
SecureRandom secureRandom = new SecureRandom(); int keyBitSize = 256; keyGenerator.init(keyBitSize, secureRandom);
init()方法接受两个参数:密钥长度和密钥生成期间使用的SecureRandom 。
密钥生成
初始化KeyGenerator实例后,可以使用它来生成密钥。 密钥生成是通过调用generateKey()方法执行的。 这是生成对称密钥的示例:
SecretKey secretKey = keyGenerator.generateKey();
密钥对生成器
KeyPairGenerator类( java.security.KeyPairGenerator )用于生成非对称密钥对。 一对非对称密钥由两个密钥组成:第一个密钥通常用于加密数据,第二个密钥用于解密使用第一个密钥加密的数据。
公钥和私钥
非对称密钥对最著名的类型是以下形式的密钥对:公钥+私钥。 私钥用于加密数据,公钥用于解密数据。 实际上,您还可以使用公钥加密数据,并使用私钥解密数据。 私钥通常是秘密的,公钥可能是所有人都知道的。 因此,如果杰克用他的私钥加密某些数据,那么拥有杰克公钥的任何人都可以解密它。
创建KeyPairGenerator的实例
要使用KeyPairGenerator,必须首先创建KeyPairGenerator类的实例。 通过调用getInstance()方法创建KeyPairGenerator的实例。 这是创建实例的示例:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
getInstance()方法接受要使用的加密算法的名称。 在此示例中,我们使用RSA算法。
初始化KeyPairGenerator
根据算法,您可能需要初始化KeyPairGenerator的实例。 KeyPairGenerator通过调用其initialize()方法进行初始化 。 KeyPairGenerator实例初始化示例:
keyPairGenerator.initialize(2048);
在此示例中,KeyPairGenerator初始化为生成2048位密钥。
密钥对生成
要使用KeyPairGenerator生成密钥对,将调用generateKeyPair()方法。 这是生成密钥对的示例:
KeyPair keyPair = keyPairGenerator.generateKeyPair();