当前位置: 首页 > 知识库问答 >
问题:

ECC私钥比公钥长

罗晨
2023-03-14

我使用secp192r1曲线生成了ECC公钥和私钥。公共密钥数组长度为75,私有密钥数组长度125。为什么私钥比公钥长?为什么私钥的长度不是公钥的两倍?为什么由于secp192r1私钥不是192位=24字节?

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

ECNamedCurveParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("secp192r1");

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(ecSpec, new SecureRandom());
KeyPair pair = g.generateKeyPair();

System.out.println(pair.getPublic().getEncoded().length);
System.out.println(pair.getPrivate().getEncoded().length);

共有1个答案

陈扬
2023-03-14

下面的代码片段输出24字节的私钥:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp192r1");

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(spec, new SecureRandom());
KeyPair pair = g.generateKeyPair();
ECPrivateKey ecPrivateKey = (ECPrivateKey)pair.getPrivate();

System.out.println(ecPrivateKey.getS().toByteArray().length);
 类似资料:
  • Auth0提供了两个JWT库,一个用于Node:Node jsonwebtoken,另一个用于Java:Java JWT。事实证明,JavaJWT不支持公钥/私钥对。 然而,另一个java库jjwt库声称支持该特性。但是,该文档没有显示如何在jjwt中使用自己的公钥/私钥对。 我创建了私有/公钥对,并在Node中成功地使用了node-jsonwebToken: 但是我发现在Java中用JWT无法做

  • 我试图理解使用带有私钥/公钥(RS512)的JSON Web令牌的逻辑,当将从客户端(在本例中是React Native App)发送到服务器的数据有效载荷签名时。 我认为私钥/公钥的全部意义在于将私钥保持为私钥(在我的服务器上),并将公钥交给成功登录应用程序的人。 我认为,对于我的服务器的每个API请求,经过身份验证的应用程序用户将使用公钥创建JWT(在客户端),服务器将使用私钥验证来自API请

  • 我想通过RSACryptServiceProvider签名和验证数据 为此,我需要公钥和私钥。 在我的项目中,我将公钥和私钥存储在XML文件中。 有一次,我生成了我的公钥和私钥 在上面,我展示了“通过公钥验证数据” 我的SignData方法类似。 在那里, 我的问题是:举个例子,我认识到;通过crt/pem/cert等导入公钥和私钥。证书文件。在那里我存储了XML文件。 我的解决方案错了吗? 第二

  • 我想在Java中通过SSL/TLS建立一个客户机服务器通信。服务器是多线程的。使用openssl,我充当自己的CA(为权威创建私钥和自签名证书)。现在我要为我的服务器和客户端创建密钥和证书,这些密钥和证书是从我创建的CA签名的。 1)我必须根据提示为每个客户创建证书和密钥吗?还是另一种“自动”方式,例如使用脚本? 2)我已经看到用于设置密钥库的代码 问题是我如何单独创建这些jks文件?public

  • 问题内容: 我试图从私钥生成公共ECDSA密钥,但是在Internet上如何进行此操作方面,我还没有找到太多帮助。几乎所有内容都是根据公共密钥规范生成公共密钥的,我不知道该如何获得。到目前为止,这是我汇总的内容: 但是,在运行时,出现以下错误: 我究竟做错了什么?有没有更好/更简便的方法可以做到这一点? 编辑:我设法获得一些代码进行编译,但不能正常工作: 当我运行它时,它会生成一个publicKe

  • 问题内容: 我以编程方式创建了jks类型(即默认类型)的Java密钥库。 它最初是空的,所以我创建了DSA证书。 如何查看公钥和私钥? 即有一个命令可以打印我的证书的私钥? 我只能从我的理解中找到哪个可以整体打印证书: 我认为这是整个证书。如何通过keytool查看私钥(或公钥)? 问题答案: 您在密钥库中创建了一个私有(和关联的公共)密钥。要使其真正可用,可以让它由认证机构(CA)签名- 因为这