gpt4 book ai didi

java - 不使用 NoPadding 的 RSA 示例

转载 作者:行者123 更新时间:2023-12-02 08:33:34 27 4
gpt4 key购买 nike

哪里可以找到使用“NoPadding”的 RSA 加密示例?

--更新

更好:如何使此 SSCCE 正确运行而不抛出“RSA block 数据过多”异常?

import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;

import javax.crypto.Cipher;

/**
* Basic RSA example.
*/
public class TestRSA {

public static void main(String[] args) throws Exception {

byte[] input = new byte[100];

Cipher cipher = Cipher.getInstance("RSA/None/NoPadding", "BC");
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");

// create the keys

RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger("d46f473a2d746537de2056ae3092c451",
16), new BigInteger("11", 16));
RSAPrivateKeySpec privKeySpec = new RSAPrivateKeySpec(new BigInteger(
"d46f473a2d746537de2056ae3092c451", 16), new BigInteger("57791d5430d593164082036ad8b29fb1",
16));

RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);
RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(privKeySpec);

// encryption step

cipher.init(Cipher.ENCRYPT_MODE, pubKey);

byte[] cipherText = cipher.doFinal(input);

// decryption step

cipher.init(Cipher.DECRYPT_MODE, privKey);

byte[] plainText = cipher.doFinal(cipherText);

}
}

--更新:关于循环

使用:

 byte[] cipherText = new byte[input.length];
for (int i = 0; i < input.length; i++) {
byte[] singleByteArray = new byte[] { input[i] };
cipherText[i] = cipher.doFinal(singleByteArray)[0];
}

无法正常工作。由于未知原因,即使输入是 0x03 数组,密文也充满了零。

最佳答案

Sun Providers Documentation SunJCE 提供程序告诉您 Cipher.getInstance() 参数中允许哪些填充规范。试试Cipher.getInstance("RSA/ECB/PKCS1PADDING");

编辑:
这不是一个填充问题,更多的是您对 RSA 在密码学中的使用方式存在误解。您可以 1) 使模数大于数据,2) 使用 Hybrid cryptosystem ,或 3) 最不希望的是将输入手动分解为每个小于模数的 block 。如果您打算使用 PKCS1 填充(通常推荐),则输入的长度不得大于 n-11 字节,其中 n 是存储 RSA 模数所需的字节数。

关于java - 不使用 NoPadding 的 RSA 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2580473/

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