package com.ngsn.security; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; /** * 数字签名(私钥签名公钥校验) * 此 Signature 类用来为应用程序提供数字签名算法功能。 * 数字签名用于确保数字数据的验证和完整性。 * @author John.Yao */ public class SecretKeyTest5 { public static void main(String[] args) throws Exception{ signature(); verify(); } /** * 签名 * 根据私钥对数据进行签名,生成签名字节 */ private static void signature() throws Exception{ //签名 KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); KeyPair keyPair = generator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); //创建signature对象 Signature signature = Signature.getInstance("SHA1withRSA"); //私钥进行签名 signature.initSign(privateKey); //更新要由字节签名或验证的数据。 signature.update("到底是怎么回事,为什么不行呢".getBytes()); //签名的数据 //返回所有已更新数据的签名字节。 byte[] result = signature.sign(); //得到签名的字节 saveKey(publicKey,"sign_public.key"); saveData(result,"mysign.data"); } /** * 校验 * 根据公钥和签名字节进行数据的校验 * @throws Exception */ private static void verify() throws Exception{ //校验 //创建signature对象 Signature signature = Signature.getInstance("SHA1withRSA"); //从文件中读取保存的公钥 PublicKey publicKey = (PublicKey)readKey("sign_public.key"); //公钥进行校验 signature.initVerify(publicKey); //添加校验的数据 signature.update("到底是怎么回事,为什么不行呢".getBytes()); //从文件中读取保存的签名字节 byte[] signed = readData("mysign.data"); //根据签名字节进行校验 boolean b = signature.verify(signed); if(b){ System.out.println("校验结果:"+b+",是自己的签名"); }else{ System.out.println("校验结果:"+b+",不是自己的签名"); } } /** * 保存密钥到指定的文件中 * @param publicKey * @param fileName * @throws Exception */ public static void saveKey(PublicKey publicKey,String fileName) throws Exception{ FileOutputStream fosKey = new FileOutputStream(fileName); ObjectOutputStream oosSecretKey = new ObjectOutputStream(fosKey); //将密钥保存到zxx_secret.key文件中 oosSecretKey.writeObject(publicKey); oosSecretKey.close(); fosKey.close(); } /** * 保存数据到指定的文件中 * @param data * @param fileName * @throws Exception */ public static void saveData(byte[] data,String fileName) throws Exception{ FileOutputStream fosData = new FileOutputStream(fileName); fosData.write(data); fosData.close(); } /** * 从指定的文件中读取密钥 * @param fileName * @return * @throws Exception */ public static Key readKey(String fileName) throws Exception{ FileInputStream fisKey = new FileInputStream(fileName); ObjectInputStream ois = new ObjectInputStream(fisKey); Key key = (Key)ois.readObject(); ois.close(); fisKey.close(); return key; } /** * 从指定的文件中读取数据 * @param fileName * @return * @throws Exception */ public static byte[] readData(String fileName) throws Exception{ FileInputStream fis = new FileInputStream(fileName); byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while((len = fis.read(buffer)) != -1){ bos.write(buffer, 0, len); } //从输出流中得到byte[]的加密数据 byte[] result = bos.toByteArray(); fis.close(); bos.close(); return result; } }
详细解决方案
java保险6
热度:291 发布时间:2012-09-10 11:02:32.0
相关解决方案
- java 乱码 汉字是 ? 如何转换成汉字
- java web 登录次数限制,该如何解决
- java 工商银行网银支付 B2B的 都亟需什么,需要注意什么
- Java Applet程序从JDK6升级到7时遇到的有关问题
- java web 视频相干
- 请教一个关于链接后缀的有关问题(java web 应用)
- java 系统单点登录解决方案
- java.lang.NumberFormatException: For input string: "id"该如何处理
- java.lang.NoSuchMethodException: setId([Ljava.lang.String;)解决方法
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- java web 受阻
- java.lang.IllegalStateException: No output folder,该怎么解决
- java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.makeAccess,该如何解决
- java 乱码有关问题 急求大神
- java EE错误如何解决阿,都是过了,没有能解决的!
- java 工程打包有关问题 多谢各位大神!多谢
- JAVA WEB导航条,该怎么处理
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password,该如何处理
- java 中Node 有关问题
- 关于 java 引述传递和值传递,你的知否
- 吐了,java Timer 终止不了。
- Java Web 学习中有关问题,请高手指教
- java web中的url地址小疑点。
- java web开发解决办法
- java.lang.NullPointerException解决方法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件