首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中计算KeyPairGenerator的密钥大小?

如何在Java中计算KeyPairGenerator的密钥大小?
EN

Stack Overflow用户
提问于 2020-08-29 22:45:29
回答 1查看 746关注 0票数 0

我想用KeyPairGenerator在Java中实现公钥和私钥--以后在密码中使用“RSA/ECB/PKCS1Padd”对我来说很重要。

在阅读了this answer之后,我应该使用以下公式:

代码语言:javascript
运行
复制
maximum bytes = key length in bits / 8 - 11

现在:

代码语言:javascript
运行
复制
512  Byte  = 4096 bit
1024 Byte  = 8192 bit

如果我使用8192/8-11,它可以正常工作,但是当我使用4096/8-11时,得到这个错误:“无效的密钥大小”。为什么我不能用512字节?这是KeyPairGenerator的限制还是什么?

代码语言:javascript
运行
复制
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(4096/8-11);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-30 10:27:10

这几天我从没听说过有限的钥匙长度,但你永远也不知道。下面的示例创建了一个4096位的KeyPair,并给出了使用中的Java版本和操作系统的一些细节。

我正在生成一个RSAPrivate/PublicKey,而不是KeyPair /PublicKey,以获得位长,但在您的示例中,您将生成后者。

这是在我的在线编译器上运行程序时的结果,在这里运行示例:https://paiza.io/projects/RGfFI7g3a2WyjjdtU8vsAA

代码语言:javascript
运行
复制
RSA Key Generation
Java version: main: 13 major: 0 minor: 1+9 update:  build:
Operation system: Linux
RSA key generation
PrivateKey: RSA format: PKCS#8 modulus: 4096
PublicKey: RSA format: X.509 modulus: 4096

以下是代码:

代码语言:javascript
运行
复制
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

public class Main {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        System.out.println("RSA Key Generation");
        System.out.println("Java version: " + getJavaVersion());
        System.out.println("Operation system: " + System.getProperty("os.name"));
        System.out.println("RSA key generation");
        KeyPairGenerator rsaGenerator = KeyPairGenerator.getInstance("RSA");
        SecureRandom random = new SecureRandom();
        rsaGenerator.initialize(4096, random);
        KeyPair rsaKeyPair = rsaGenerator.generateKeyPair();
        RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) rsaKeyPair.getPrivate();
        RSAPublicKey rsaPublicKey = (RSAPublicKey) rsaKeyPair.getPublic();
        System.out.println("PrivateKey: " + rsaPrivateKey.getAlgorithm()
                + " format: " + rsaPrivateKey.getFormat()
                + " modulus: " + rsaPrivateKey.getModulus().bitLength());
        System.out.println("PublicKey: " + rsaPublicKey.getAlgorithm()
                + " format: " + rsaPublicKey.getFormat()
                + " modulus: " + rsaPublicKey.getModulus().bitLength());
    }
    public static String getJavaVersion() {
        String[] javaVersionElements = System.getProperty("java.runtime.version").split("\\.|_|-b");
        String main = "", major = "", minor = "", update = "", build = "";
        int elementsSize = javaVersionElements.length;
        if (elementsSize > 0) {main = javaVersionElements[0];}
        if (elementsSize > 1) {major   = javaVersionElements[1];}
        if (elementsSize > 2) {minor   = javaVersionElements[2];}
        if (elementsSize > 3) {update  = javaVersionElements[3];}
        if (elementsSize > 4) {build   = javaVersionElements[4];}
        return "main: " + main + " major: " + major + " minor: " + minor + " update: " + update + " build: " + build;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63652451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档