java 加密之数字签名算法
来源:互联网 发布:云计算培训机构 编辑:程序博客网 时间:2024/06/02 19:42
简介
数字签名算法是带有公钥和私钥的消息摘要算法,私钥签名,公钥验证,用来验证数据完整性,验证数据来源,抗否认。
数字签名必须具备 5 个特性:
(1)签名是可信的。
(2)签名是不可伪造的。
(3)签名是不可重用的。
(4)签名的文件是不可改变的。
(5)签名是不可抵赖的。
流行的有RSA、DSA、ECDSA算法。
RSA算法
包括MD和SHA两类。其中 MD5withRSA 的java实现:
public class MyRSA { private static String str = "guo feng"; public static void main(String[] args) { try { //初始化密钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); KeyPair keyPair = keyPairGenerator.generateKeyPair(); RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); //私钥签名 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); Signature signature = Signature.getInstance("MD5withRSA"); signature.initSign(privateKey); signature.update(str.getBytes()); byte[] result = signature.sign(); System.out.println(new BigInteger(result)); //公钥验证 X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded()); keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); signature = Signature.getInstance("MD5withRSA"); signature.initVerify(publicKey); signature.update(str.getBytes()); boolean b = signature.verify(result); System.out.println(b); } catch (Exception e) { e.printStackTrace(); } }}
输出:
2982312259358826061447321482940705327790349142998412535792313942953590618626400322298375288237244307356609052905381328226612007870641624392779916247258746true
场景时序图:
首先:
然后:
0 0
- java 加密之数字签名算法
- Java加密解密之数字签名
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- 【密钥算法】Java加密技术(六)---DSA 数字签名算法
- Java加密和数字签名
- Java加密和数字签名
- Java加密和数字签名
- Java加密和数字签名
- Java加密技术(六)——数字签名算法DSA
- Java加密技术(六)——数字签名算法DSA
- Java加密技术(六)——数字签名算法DSA
- Java加密技术(六)——数字签名算法DSA
- Java加密技术(六)——数字签名算法DSA
- 《XMLHttpRequest对象-AJAX技术核心》
- 设计模式(11)——模板方法模式(Template Method Pattern,行为型)
- UnicodeEncodeError: 'ascii' codec can't encode characters in 解决办法
- DFS J. Cleaner Robot Codeforce 589J(实例与分析)
- 统计字符_HDU
- java 加密之数字签名算法
- 什么是泛型?
- TCP第四次挥手为什么要等待2MSL
- 【九度OJ】题目1201:二叉排序树 解题报告
- Linux进程创建之fork()函数
- C++之多态(纯虚函数+RTTI+异常处理)
- maven的简单使用方法,添加公共jar和第三方jar包
- 【HDU-oj】-4920-Matrix multiplication(矩阵,裸)
- 关于hololens调用讯飞语音sdk问题汇总