gpt4 book ai didi

java使用 key 对加密和解密?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:55 24 4
gpt4 key购买 nike

有谁知道如何使用 RSA 公钥和私钥加密和解密字符串对象?

我在下面使用 KeyPair 生成器创建了私钥和公钥,但我现在想使用公钥加密数据,并使用私钥解密数据。

public class Keys {

private static KeyPairGenerator generator;

private static KeyPair keyPair;

private static PrivateKey mPrivateKey;

private static PublicKey mPublicKey;

private static SecureRandom secureRandom;

private static final String SHA1PRNG = "SHA1PRNG";

public static final String RSA = "RSA";

private Keys() throws NoSuchAlgorithmException {
generator = KeyPairGenerator.getInstance("RSA");
}

/**
* Generate private and public key pairs
*
* @throws NoSuchAlgorithmException
*/
private static void generateKeyPair() throws NoSuchAlgorithmException {
// create SecureRandom object used to generate key pairs

secureRandom = SecureRandom.getInstance(SHA1PRNG);

// initialise generator
generator = KeyPairGenerator.getInstance(RSA);
generator.initialize(1024, secureRandom);

// generate keypair using generator
keyPair = generator.generateKeyPair();

// asssign private and public keys
setPrivateKey(keyPair.getPrivate());
setPublicKey(keyPair.getPublic());

}

/**
* Get private key from key generated
* @return
* @throws NoSuchAlgorithmException
*/
public static PrivateKey getPrivateKey() throws NoSuchAlgorithmException {

if (mPrivateKey == null) {
generateKeyPair();
}
return mPrivateKey;
}

private static void setPrivateKey(PrivateKey privateKey) {
mPrivateKey = privateKey;
}

/**
* Get public key from key pair generated
*
* @return
* @throws NoSuchAlgorithmException
*/
public PublicKey getPublicKey() throws NoSuchAlgorithmException {
if (mPublicKey == null) {
generateKeyPair();
}
return mPublicKey;
}

private static void setPublicKey(PublicKey publicKey) {
mPublicKey = publicKey;
}

这是可能的还是加密必须共享和使用相同的 key ?

主要目的是这个。

我将有两个客户端可以相互发送和接收加密数据。

客户端A接收加密数据:

客户端 B 请求客户端 A 的公钥。客户端B加密字符串发送给客户端A。客户端 A 收到这个加密的字符串,然后使用自己的私钥对其进行解密。

反之亦然,如果客户端 B 希望接收加密数据。

最佳答案

RSA加密只能用于加密小于 key 模数的数据。 IE。一个 2048 位的 RSA 公钥只能加密 256 字节的数据。填充字节需要其中一些数据,因此通常只剩下更少的空间可以使用。

通常这是通过混合加密方案解决的。也就是说,数据本身是用临时的对称 session key 加密的,然后 session key 用接收方的公钥加密。加密数据和加密 session key 都发送给接收者。

您可能希望考虑像 OpenPGP 这样的东西,它实现了这种行为(以及更多)。 BouncyCaSTLe 为 Java 提供了一个 OpenPGP 实现。

关于java使用 key 对加密和解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com