



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.DSS签名算法验证package DSS;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.Signature; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class DSS_Demo /不仅可以使用DSA算法,同样也可以使用RSA算法做数字签名 /*public static final String KEY_ALGORITHM = RSA; public static final String SIGNATURE_ALGORITHM = MD5withRSA;*/ public static final String KEY_ALGORITHM = DSA; public static final String SIGNATURE_ALGORITHM = DSA; public static final String DEFAULT_SEED = $%*%()(HJG8awfjas7; /默认种子 public static final String PUBLIC_KEY = DSAPublicKey; public static final String PRIVATE_KEY = DSAPrivateKey; public static void main(String args) throws Exception BufferedReader plain=new BufferedReader(new InputStreamReader(new FileInputStream(C:UsersAdministratorworkspaceCryptologysrcDSSplaintext.text); String str ; while(str=plain.readLine()!=null) byte data = str.getBytes(); Map keyMap = initKey();/ 构建密钥 PublicKey publicKey = (PublicKey) keyMap.get(PUBLIC_KEY); PrivateKey privateKey = (PrivateKey) keyMap.get(PRIVATE_KEY); System.out.println(私钥format: + privateKey.getFormat(); System.out.println(公钥format: + publicKey.getFormat(); / 产生签名 String sign = sign(data, getPrivateKey(keyMap); / 验证签名 boolean verify1 = verify(aaa.getBytes(), getPublicKey(keyMap), sign); System.err.println(经验证 数据和签名匹配: + verify1); boolean verify = verify(data, getPublicKey(keyMap), sign); System.err.println(经验证 数据和签名匹配: +verify); / System.out.println(数字签名为 +sign); OutputStreamWriter result=new OutputStreamWriter(new FileOutputStream(C:UsersAdministratorworkspaceCryptologysrcDSSsign.text); result.write(sign); result.close(); /* * 生成密钥 * param seed 种子 * return 密钥对象 * throws Exception */ public static Map initKey(String seed) throws Exception System.out.println(生成密钥); KeyPairGenerator keygen = KeyPairGenerator.getInstance(KEY_ALGORITHM); SecureRandom secureRandom = new SecureRandom(); secureRandom.setSeed(seed.getBytes(); /Modulus size must range from 512 to 1024 and be a multiple of 64 keygen.initialize(640, secureRandom); KeyPair keys = keygen.genKeyPair(); PrivateKey privateKey = keys.getPrivate(); PublicKey publicKey = keys.getPublic(); Map map = new HashMap(2); map.put(PUBLIC_KEY, publicKey); map.put(PRIVATE_KEY, privateKey); return map; /* * 生成默认密钥 * * return 密钥对象 * throws Exception */ public static Map initKey() throws Exception return initKey(DEFAULT_SEED); /* * 取得私钥 * param keyMap * return * throws Exception */ public static String getPrivateKey(Map keyMap) throws Exception Key key = (Key) keyMap.get(PRIVATE_KEY); return encryptBASE64(key.getEncoded(); /base64加密私钥 /* * 取得公钥 * param keyMap * return * throws Exception */ public static String getPublicKey(Map keyMap) throws Exception Key key = (Key) keyMap.get(PUBLIC_KEY); return encryptBASE64(key.getEncoded(); /base64加密公钥 /* * 用私钥对信息进行数字签名 * param data 加密数据 * param privateKey 私钥-base64加密的 * return * throws Exception */ public static String sign(byte data, String privateKey) throws Exception System.out.println(用私钥对信息进行数字签名); byte keyBytes = decryptBASE64(privateKey); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM); PrivateKey priKey = factory.generatePrivate(keySpec);/生成 私钥 /用私钥对信息进行数字签名 Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initSign(priKey); signature.update(data); return encryptBASE64(signature.sign(); /* * BASE64Encoder 加密 * param data 要加密的数据 * return 加密后的字符串 */ private static String encryptBASE64(byte data) BASE64Encoder encoder = new BASE64Encoder(); String encode = encoder.encode(data); return encode; private static byte decryptBASE64(String data) throws Exception BASE64Decoder decoder = new BASE64Decoder(); byte buffer = decoder.decodeBuffer(data); return buffer; public static boolean verify(byte data, String publicKey, String sign) throws Exception byte keyBytes = decryptBASE64(publicKey); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORIT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 午餐科学搭配课件
- 硬笔点画教学课件
- 课件桥梁教学课件
- 应急处置培训课件
- 课件标准尺寸
- 课件末班教学课件
- 儿童创意口罩设计入门
- 表演基础全套课件
- 课件显示快捷方式
- 锂电行业考试题及答案
- 公务员面试人际关系题人际关系面试题及答案
- 2025年乡镇畜牧站动物检疫员招聘考试重点知识点梳理与解析
- 2025年中国电信招聘考试题库与答案解析
- 土地合作协议书合同模板
- 2025-2030中国废弃光伏组件回收处理技术路线与经济性分析报告
- 2025水利安全员C证考试题库(含答案)
- Unit 1 This is me!第5课时 Integration 说课稿- 2024-2025学年译林版(2024)七年级上册英语
- 一级建造师-机电工程管理与实务-案例专题突破教学课件
- 《中华人民共和国学前教育法》试题库及答案
- 新沪教牛津版九年级上册英语全册教案
- 全校教学质量提升会上校长讲话:把每一节课教好是我们最实在的荣耀
评论
0/150
提交评论