对信息进行做数字摘要,验证信息是否被篡改!
2015-04-02 15:26
232 查看
package com.yjm.test509; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.PrivateKey; import java.security.Signature; import java.security.SignatureException; import java.security.UnrecoverableKeyException; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; public class Test { public static void main(String[] args) { // test(); // test1(); // test2(); // test3(); // test4(); test5(); } private static void test5() { try { // RSA 密钥对 用私钥签名用公钥验签 KeyPairGenerator keyPairGenerator = KeyPairGenerator .getInstance("RSA"); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 获得公钥私钥 RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); //获得签名算法 Signature signature = Signature.getInstance("MD5withRSA"); //对数据进行签名 signature.initSign(rsaPrivateKey); signature.update("test".getBytes()); byte[] b=signature.sign(); System.out.println("签名之后的串"+new String(b)); //对传输的数据进行验签 signature.initVerify(rsaPublicKey); signature.update("test".getBytes()); boolean boolea = signature.verify(b); //输出验签结果 System.out.println("验签结果: "+boolea); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (SignatureException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } }
输出结果
签名之后的串s[GQ-rmUD" Iid
c^# 2gi9n&qJFfHhTY<+g
8l#Bz11v_(L
验签结果: true
相关文章推荐
- 类库------对一些字符串进行操作的类1.判断输入是否数字2.截取字符串函数3.过滤输入信息4.生成随机数5.生成验证码图片6.获取汉字第一个拼音7.半角转全角8.全角转半角
- OpenSSL学习之使用个人信息数字证书(PFX)进行签名和验证
- 验证信息是否包含数字两种方法任你选!!!
- OpenSSL学习之使用个人信息数字证书(PFX)进行签名和验证
- OpenSSL学习之使用个人信息数字证书(PFX)进行签名和验证
- c# 中验证输入字符串是否是数字(包括小数)
- 验证是否是数字.抛异常
- [学习日记]对SOAP头内添加信息的验证,可实现对请求WEB服务进行身份验证。
- C#验证输入的是否数字的方法
- C#验证输入的是否数字的方法
- C#验证输入的是否数字的几种方法
- C#验证输入的是否数字的方法
- C#验证输入的是否数字的方法
- C#验证输入的是否数字的方法
- 在进行Forms身份验证时如何将此信息映射到GenericPrincipal 和 FormsIdentity 对象?
- c#中验证输入文本是否数字
- 在进行Forms身份验证时如何将此信息映射到GenericPrincipal 和 FormsIdentity 对象?
- 可再发行平台 SDK:CAPICOM ,对数据进行数字签名、对代码签名、验证数字签名、包封保密数据、对数据进行散列处理、加密及解密数据的SDK
- 验证字符串是否为数字
- vb.net 验证输入内容是否是数字