我已经在Java中设置了公钥和私钥加密,并分发了两个用户的公钥(通信是在两个用户之间)。我现在希望用户交换一个对称密钥。我应该做的:
用户A生成密钥的我的代码:
1. KeyGenerator keyGenerator = KeyGenerator.getInstance(ENCMETHOD);
2. SecureRandom secureRandom = new SecureRandom();
3. int keyBitSize = 128;
4. keyGenerator.init(keyBitSize, secureRandom);
5. secretKey = keyGenerator.generateKey();
6. encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
// encrypt with public key of B and then my private key
7. String encryptedMessage = encodedKey;
8. encryptedMessage = ac.encryptText
(
ac.encryptText(encryptedMessage, otherUserPublickey),
privateKey
);
第8行抛出以下错误:
javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:344)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at driver.AsymmetricCryptography.encryptText(AsymmetricCryptography.java:73) // please refer to the code section below for this method
at driver.ClientOne.main(ClientOne.java:158) // this is line 8 in the above code
public String encryptText(String msg, PrivateKey key)
throws
UnsupportedEncodingException, IllegalBlockSizeException,
BadPaddingException, InvalidKeyException {
this.cipher.init(Cipher.ENCRYPT_MODE, key);
return Base64.encodeBase64String(cipher.doFinal(msg.getBytes("UTF-8")));
}
// this.cipher = Cipher.getInstance("RSA");
非常感谢任何帮助。多谢了。
看起来您已经超过了可以使用RSA加密的数据量(请参阅此处https://security.stackexchange.com/questions/44702/whats-the-limit-on-the-size-of-the-data-that-public-key-cryptos-can-handle)。
问题内容: 此代码生成一对公钥/私钥: 我想知道的是您通常如何存储公钥: 选项1:存储字节 我不喜欢将代码绑定到诸如和的具体实现。 选项2:存储模数和指数 第二个选项更易于实现,但是我不知道它是否可能性能较低。 有什么建议吗? 问题答案: 在我们的应用程序中,我们以DER格式存储公钥和私钥,以便可以在Java外部更轻松地使用和操纵它们。在我们的情况下,私钥上没有密码。 要将私钥转换为在Java中更
本文向大家介绍Java生成非对称型加密公钥和私钥的方法,包括了Java生成非对称型加密公钥和私钥的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java生成非对称型加密公钥和私钥的方法。分享给大家供大家参考。具体如下: 非对称型加密非常适合多个客户端和服务器之间的秘密通讯,客户端使用同一个公钥将明文加密,而这个公钥不能逆向的解密,密文发送到服务器后有服务器端用私钥解密,这样就做到了明
我知道这很难...但我使用OpenSSL以一种非常标准的方式加密文件。该文件使用RSA-2048公钥在AES-256中加密。我想在Java中使用私钥解密文件。我研究了很长时间,尝试了很多方法,但似乎都行不通。我只是找到相关的问题与工作的解决方案,但不是确切地为我的问题。 我使用以下命令生成public-/private-key-pair:
并且我将这个函数称为用RSA公钥加密DSA密钥的函数:
您可以在AWS KMS中创建非对称密钥对(加密/解密)。当前AWS CLI允许访问公钥(https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kms/get-public-key.html) 我无法在Terraform的KMS资源中看到这一点。是我错过了什么还是这只是在最新版本中还没有,
我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥: