我想知道是否存在可以同时执行KeyAgreement和Signature的公钥/私钥规范(最好是Java本身,没有外部库)。
答案 0 :(得分:0)
尝试椭圆曲线:
KeyPairGenerator eckpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec p256 = new ECGenParameterSpec("secp256r1");
eckpg.initialize(p256);
KeyPair doubleUseKeyPair = eckpg.generateKeyPair();
KeyAgreement ecdh = KeyAgreement.getInstance("ECDH");
ecdh.init(doubleUseKeyPair.getPrivate());
// ...
Signature ecdsa = Signature.getInstance("SHA256withECDSA");
ecdsa.initSign(doubleUseKeyPair.getPrivate());
// ...
System.out.println(eckpg.getProvider());
System.out.println(ecdh.getProvider());
System.out.println(ecdsa.getProvider());
应该返回:
SunEC 1.7版
SunEC 1.7版
SunEC 1.7版
当然,这是来自Sun / Oracle的Java 7。
请注意,使用相同的密钥(对)两个不同的目的被大多数人认为是错误的密钥管理。它可能允许使用算法和协议中的任一个或组合中的漏洞的攻击。使用相同的键类型/强度当然可以。