- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 ECDH(椭圆曲线 Diffie-Hellman)加密有一个小问题。我使用 BouncyCaSTLe 库。
这是我生成 key 的函数:
public static KeyPair generateECKeys() {
try {
ECNamedCurveParameterSpec parameterSpec = ECNamedCurveTable.getParameterSpec("brainpoolp256r1");
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECDH", "BC");
keyPairGenerator.initialize(parameterSpec);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
return keyPair;
} catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException | NoSuchProviderException e) {
Log.d("Error - ",e.getMessage());
e.printStackTrace();
return null;
}
}
我用 base64 编码我的公钥:
String keyPairA_public_base64 = Base64.getEncoder().encodeToString(keyPairA.getPublic().getEncoded());
这是收到的 key 示例:
keyPairA_public_base64 = "MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGuSxmgwVGLHwcVhSf7C4/BfxfL4pGixHht8rWjPMBMTH5Vav1RQnf/Ucv9rLpD3M6ad8hHotwP5IpFsQT3hRkg="
现在,我需要使用公钥 (String) 生成一个 ECPublicKey 对象。
ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("brainpoolp256r1");
KeyFactory kf = KeyFactory.getInstance("ECDH", new BouncyCastleProvider());
ECNamedCurveSpec params = new ECNamedCurveSpec("brainpoolp256r1", spec.getCurve(), spec.getG(), spec.getN());
ECPoint point = ECPointUtil.decodePoint(params.getCurve(), keyPairA.getPublic().getEncoded()); // Error here : Invalid point encoding 0x30
ECPublicKeySpec pubKeySpec = new java.security.spec.ECPublicKeySpec(point, params);
ECPublicKey pk = (ECPublicKey) kf.generatePublic(pubKeySpec);
但是,当我使用 ECPointUtil.decodePoint() 时出现错误:Invalid point encoding 0x30
我不明白如何解决这个错误,以及我是否使用正确的方法从字符串创建 ECPublicKey 对象。
你能帮帮我吗? :)
最佳答案
ECPointUtil.decodePoint()
需要原始公钥。另一方面,keyPairA_public_base64
是 X.509/SPKI 格式的 Base64 编码公钥(即不是原始公钥),可以按如下方式导入:
import java.security.spec.X509EncodedKeySpec;
import java.security.interfaces.ECPublicKey;
import java.security.KeyFactory;
...
X509EncodedKeySpec x509EncodedKeySpecA = new X509EncodedKeySpec(Base64.getDecoder().decode(keyPairA_public_base64));
KeyFactory keyFactoryA = KeyFactory.getInstance("ECDH");
ECPublicKey publicKeyA = (ECPublicKey)keyFactoryA.generatePublic(x509EncodedKeySpecA);
关于Java/Android - ECDH 加密 - 从字符串创建 ECPublicKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68590803/
我有一个普通的字符串,我使用 Java util 中的 Base64 类对其进行编码,并将其传递到 ECPublicKey 构造函数中,但它不起作用。我们是否必须以其他格式进行编码才能将其传递到 EC
我得到一个 64 位未压缩的公钥,需要运行 ECDH 来生成共享 key 。为了调用 ECDH,我需要将字节数组转换为 PublicKey 并且我使用的是我在本论坛中找到的以下代码: public s
我知道曲线名称 ( secp256k1 ) 和 X和 Y EC 公钥的坐标。 如何制作 org.bouncycastle.jce.interfaces.ECPublicKey在他们之外? 我读过 ht
目前我正在更新我的 x.509 证书库以支持 ECC。大多数已实现的构建器都采用 publicKey 并从 key 中导出算法等。在 RSA 中,这很简单,您检查 key 的算法并可以验证位长度。然而
我正在尝试在给定私钥和已知曲线的情况下生成公钥。下面是我的代码: // Generate Keys ECGenParameterSpec ecGenSpec = new ECGenParameterS
我对 ECDH(椭圆曲线 Diffie-Hellman)加密有一个小问题。我使用 BouncyCaSTLe 库。 这是我生成 key 的函数: public static KeyPair genera
我正在尝试使用 pointy caSTLe 通过 secp256k1 曲线生成公钥和私钥对。我想我已经成功创建了一个由 ECPrivateKey 和 ECPublicKey 组成的 Asymmetri
我想将 ECPublicKey 转换为 PEM 格式,如下所示 "-----BEGIN PUBLICKEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo0WcFr
这个问题与我昨天问的问题相关:Recovering an ECPublicKey from JavaCard to Java 我有同样的问题,但方式相反:将公钥从我的卡发送到我的计算机后(该点按照 A
在andorid xamarin项目中,我正在使用EC曲线生成 key 对 generator = KeyPairGenerator.GetInstance(KeyProperties.KeyAlgo
我需要通过 ECDSA secp256k1 曲线验证远程生成的签名。我得到 64 个字节,代表 r 和 s 的原始字节。以及 ANSI X9.62 编码的公钥 ([0x04, X (32 bytes)
我正在尝试在终端(由我的计算机模拟)和智能卡(Java 卡)之间实现 ECDH。 我修复了我想使用的椭圆曲线,在卡端我有以下代码来运行协议(protocol)的第一部分: ECPubl
希望在这里得到一些帮助... 我试图从未压缩的客户端公钥(0x04 |32字节点X|32字节点Y)和服务器私钥(openSSL生成base64)生成共享 key ,但在将服务器EC私钥转换为EC时出现
在 Java 中,我有一个以字节数组形式发送的 ECDH 公钥。 收到字节数组后,我该如何将其转回公钥? 我正在使用 Bouncy CaSTLe,但 Java 解决方案同样有用。 谢谢 最佳答案 当您
我有一个用于椭圆曲线的自定义加密引擎,我正在尝试使其与 Java 的 bouncy caSTLe 加密兼容,因此我正在针对 Java 的 bouncycaSTLe 测试我的 API( key 对生成)
我是一名优秀的程序员,十分优秀!