繁体   English   中英

RSA加密(模数/指数):RSA块数据过多

[英]Encryption with RSA (modulus/exponent) : too much data for RSA block

我有一个modulus key和一个exponent key ,我创建了一个RSA public key来加密data ,但是出现了这个异常

java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block

详细信息如下:

模量值:

B390F7412F2554387597814A25BC11BFFD95DB2D1456F1B66CDF52BCC1D20C7FF24F3CCE7B2D66E143213F64247454782A377C79C74477A28AF6C317BE68BC6E8FF001D375F9363B5A7161C2DFBC2ED0850697A54421552C6288996AC61AF5A9F7DE218ABBC75A145F891266615EB81D11A22B7260F7608083B373BA4BC0756B
size: 256

指数值:

010001

要加密的数据:

1A0498EA0DF19B45043DA4688AE3A7B3D592D61CC0EBB82FB100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
size: 256

这是代码:

public static String encryptData(String data, BigInteger modulus, BigInteger exponent) throws Exception {
    RSAPublicKeySpec spec = new RSAPublicKeySpec(modulus, exponent);
    KeyFactory factory = KeyFactory.getInstance("RSA", "BC");
    PublicKey pub = factory.generatePublic(spec);
    Cipher rsa = Cipher.getInstance("RSA", "BC");
    rsa.init(Cipher.ENCRYPT_MODE, pub);

    byte[] cipherText = rsa.doFinal(data.getBytes()); // ERROR HERE
    return Hex.toString(cipherText);
}

这是生成的公钥

30819F300D06092A864886F70D010101050003818D0030818902818100B390F7412F2554387597814A25BC11BFFD95DB2D1456F1B66CDF52BCC1D20C7FF24F3CCE7B2D66E143213F64247454782A377C79C74477A28AF6C317BE68BC6E8FF001D375F9363B5A7161C2DFBC2ED0850697A54421552C6288996AC61AF5A9F7DE218ABBC75A145F891266615EB81D11A22B7260F7608083B373BA4BC0756B0203010001
size: 342

谢谢!

对大型文档使用公钥(非对称)加密的通常方法是创建随机的一次性密码。 该密码短语与基于密码的加密(对称)算法(例如AES-256)一起使用。 使用AES加密文档,然后使用公共密钥加密密码短语。

一般而言,对称加密算法比非对称加密算法快几个数量级。 因此,RSA不仅不适合直接对大型文档进行加密,而且还需要更多的计算才能进行加密。

顺便说一句,我将提到加密很难实现。 我强烈建议您以标准方式使用标准库,以确保安全实施。

错误只是愚蠢的:

byte[] cipherText = rsa.doFinal(data.getBytes()); // ERROR HERE

我加密了data.getBytes() ,但是实际上我首先需要从其十六进制表示形式解码data ,然后才对其进行加密。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM