java 使用密钥加密_java使用密钥对加密和解密?

有谁知道如何使用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;

}

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

主要目的是这个.

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

对于客户A来接收加密数据:

客户端B请求客户A的公钥.

客户端B加密字符串并将其发送给客户端A.

客户端A接收此加密的字符串,然后使用自己的私钥对其进行解密.

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

解决方法:

RSA加密只能用于加密小于密钥模数的数据.即2048位RSA公钥只能加密256字节的数据.填充字节需要一些这样的数据,因此通常会留下更少的空间来播放.

通常,这通过混合加密方案来解决.也就是说,数据本身是使用临时对称会话密钥加密的,然后会话密钥使用收件人的公钥加密.加密数据和加密会话密钥都被发送给收件人.

您可能希望考虑类似OpenPGP的东西,它实现了这种行为(以及更多). BouncyCastle是一个针对Java的OpenPGP实现.

标签:java,encryption,cryptography,key-pair

来源: https://codeday.me/bug/20190831/1779209.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值