数字签名算法ECDSA
2017-03-27 09:54
585 查看
package signature; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.SignatureException; import java.security.interfaces.ECPrivateKey; import java.security.interfaces.ECPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; public class ECDSA { private static String src = "何芳"; public static void main(String[] args) { ecdsaj(); } public static void ecdsaj(){ try { //初始化秘钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC"); keyPairGenerator.initialize(256); KeyPair keyPair = keyPairGenerator.generateKeyPair(); ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic(); ECPrivateKey ecPrivateKey = (ECPrivateKey) keyPair.getPrivate(); //执行签名 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("EC"); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); Signature signature = Signature.getInstance("SHA1withECDSA"); signature.initSign(privateKey); signature.update(src.getBytes()); byte[] result = signature.sign(); System.out.println("jdk ECDSA 签名:" + result); //验证签名 X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ecPublicKey.getEncoded()); keyFactory = KeyFactory.getInstance("EC"); PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); signature = Signature.getInstance("SHA1withECDSA"); signature.initVerify(publicKey); signature.update(src.getBytes()); boolean bool = signature.verify(result); System.out.println("jdk ECDSA 签名:" + bool); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (SignatureException e) { e.printStackTrace(); } } }
//很无奈,我这里报错,我用的是jdk6的版本,据说要7的第四个版本上才能使用
有人知道是这样的吗?如果你用7版本以上的成功了,请留下你的足迹,谢谢!
java.security.NoSuchAlgorithmException: EC KeyPairGenerator not available
at java.security.KeyPairGenerator.getInstance(Unknown Source)
at signature.ECDSA.ecdsaj(ECDSA.java:31)
at signature.ECDSA.main(ECDSA.java:23)
相关文章推荐
- ECDSA数字签名算法及JAVA实现
- 数字签名算法ECDSA
- ecdsa 椭圆曲线数字签名算法
- 椭圆曲线数字签名算法(ECDSA)
- ECDSA数字签名算法
- 【比特币】椭圆曲线数字签名算法-ECDSA
- 数字签名算法_ECDSA
- SM2算法第十五篇:ECDSA数字签名算法的C语言实现
- SM2算法第二十五篇:ECDSA数字签名算法原理与实现
- 数字签名算法ECDSA
- Java加密技术(六)——数字签名算法DSA
- ECDSA (Elliptic Curve Digital Signature Algorithm)
- 经典的数字签名算法-RSA
- ssh无密码登录设置出现问题 ECDSA host key 和IP地址对应的key不同的解决
- Java加密技术(六)——数字签名算法DSA
- ssh报错:Could not load host key:/etc/ssh/ssh_host_rsa_key&ssh_host_ecdsa_key&ssh_host_ed25519_key
- [以太坊源代码分析] IV. 椭圆曲线密码学和以太坊中的椭圆曲线数字签名算法应用
- 数字签名算法RSA
- 数字签名算法分析与Hash签名
- windows下安装并使用Python的SSH模块(paramiko+pycrypto+ecdsa)