Java 中的非对称加密密码
密码学是对不同技术的研究,以保护来自未授权实体的数据。在计算机科学中,我们试图开发保护敏感数据的策略和实践。大多数密码学都涉及到用于保护数据的非常先进的数学函数。为密码学开发的算法的唯一目的是对攻击者或中间人隐藏数据。 在前面的文章中,我们已经研究了执行对称加密和解密的不同方法、类和方法。在本文中,我们将了解非对称加密。 非对称加密又称私钥/公钥加密是两个密钥之间的数学关系,一个用于加密,另一个用于解密。例如,如果有两个密钥“K1”和“K2”,那么如果密钥“K1”用于加密,“K2”用于解密。如果“K1”用于解密,那么“K2”用于加密。
在使用 RSA 算法实现非对称加密之前,我们将首先了解如何生成密钥空气(公共的、私有的)。为了生成非对称密钥,可以遵循以下步骤:
- 我们需要首先使用安全对象类生成公钥和私钥。SecureRandom 类用于生成随机数。
securerandom = new securerandom():
- 密钥生成器类将提供 getInstance() 方法,该方法可用于传递表示密钥生成算法的字符串变量。它返回密钥生成器对象。我们使用 RSA 算法来生成密钥。
KeyPairGenerator KPGenerator = KeyPairGenerator . getinstance(Key _ Generation _ Algorithm _ string _ variable);
- 用 2048 位密钥大小初始化密钥生成器对象,并传递随机数。
key pair generator . initialize(2048,secureRandom):
- 现在,生成了密钥,如果我们希望看到生成的密钥是一个对象,我们可以使用 DatatypeConverter 将其转换为六进制格式。
以下是上述方法的实现:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to create a
// asymmetric key
package java_cryptography;
import java.security.KeyPair;
import java.security
.KeyPairGenerator;
import java.security
.SecureRandom;
import javax.xml.bind
.DatatypeConverter;
// Class to create an asymmetric key
public class Asymmetric {
private static final String RSA
= "RSA";
// Generating public and private keys
// using RSA algorithm.
public static KeyPair generateRSAKkeyPair()
throws Exception
{
SecureRandom secureRandom
= new SecureRandom();
KeyPairGenerator keyPairGenerator
= KeyPairGenerator.getInstance(RSA);
keyPairGenerator.initialize(
2048, secureRandom);
return keyPairGenerator
.generateKeyPair();
}
// Driver code
public static void main(String args[])
throws Exception
{
KeyPair keypair
= generateRSAKkeyPair();
System.out.println(
"Public Key is: "
+ DatatypeConverter.printHexBinary(
keypair.getPublic().getEncoded()));
System.out.println(
"Private Key is: "
+ DatatypeConverter.printHexBinary(
keypair.getPrivate().getEncoded()));
}
}
输出:
使用非对称密钥进行加密和解密:在上述步骤中,我们已经创建了用于加密和解密的公共&私钥。现在,让我们使用 RSA 算法实现非对称加密。为了实现加密和解密,可以遵循以下步骤。
- 密码类用于加密和解密两种不同的模式。由于非对称加密使用不同的密钥,我们使用私钥进行加密,使用公钥进行解密。
密码初始化(密码。ENCRYPT_MODE,private key); 密码初始化(密码。DECRYPT_MODE,public key);
- 在密码上调用 doFinal() 方法,该方法在单部分操作中加密/解密数据,或者完成多部分操作并返回字节数组。
- 最后得到加密后的密文。
以下是上述方法的实现:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to perform the
// encryption and decryption
// using asymmetric key
package java_cryptography;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.util.Scanner;
import javax.crypto.Cipher;
import javax.xml.bind
.DatatypeConverter;
public class Asymmetric {
private static final String RSA
= "RSA";
private static Scanner sc;
// Generating public & private keys
// using RSA algorithm.
public static KeyPair generateRSAKkeyPair()
throws Exception
{
SecureRandom secureRandom
= new SecureRandom();
KeyPairGenerator keyPairGenerator
= KeyPairGenerator.getInstance(RSA);
keyPairGenerator.initialize(
2048, secureRandom);
return keyPairGenerator
.generateKeyPair();
}
// Encryption function which converts
// the plainText into a cipherText
// using private Key.
public static byte[] do_RSAEncryption(
String plainText,
PrivateKey privateKey)
throws Exception
{
Cipher cipher
= Cipher.getInstance(RSA);
cipher.init(
Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(
plainText.getBytes());
}
// Decryption function which converts
// the ciphertext back to the
// original plaintext.
public static String do_RSADecryption(
byte[] cipherText,
PublicKey publicKey)
throws Exception
{
Cipher cipher
= Cipher.getInstance(RSA);
cipher.init(Cipher.DECRYPT_MODE,
publicKey);
byte[] result
= cipher.doFinal(cipherText);
return new String(result);
}
// Driver code
public static void main(String args[])
throws Exception
{
KeyPair keypair
= generateRSAKkeyPair();
String plainText = "This is the PlainText "
+ "I want to Encrypt using RSA.";
byte[] cipherText
= do_RSAEncryption(
plainText,
keypair.getPrivate());
System.out.println(
"The Public Key is: "
+ DatatypeConverter.printHexBinary(
keypair.getPublic().getEncoded()));
System.out.println(
"The Private Key is: "
+ DatatypeConverter.printHexBinary(
keypair.getPrivate().getEncoded()));
System.out.print("The Encrypted Text is: ");
System.out.println(
DatatypeConverter.printHexBinary(
cipherText));
String decryptedText
= do_RSADecryption(
cipherText,
keypair.getPublic());
System.out.println(
"The decrypted text is: "
+ decryptedText);
}
}
输出:
版权属于:月萌API www.moonapi.com,转载请注明出处