验证签名机制——java示例
2015-08-20 15:24
639 查看
简单的验证公钥私钥签名认证;
公钥是对外公开的部分,私钥是不公开的部分,一般在项目开发中公钥是给用户,私钥是存于服务器上,二者中有一个加密,则需要另外一个来解密。
下面是java实现的一个比较简单的示例:示例中注释写的很详细,可以大致看下,供参考
步骤:
1.首先获得公钥/私钥对
2.根据获得公钥/私钥对,根据指定的算法来加密指定的内容,根据私钥加密获得相对应的公钥,公开,给用户;
3.用户根据内容来验证自己是否是跟传来的公钥是一对。。。
公钥是对外公开的部分,私钥是不公开的部分,一般在项目开发中公钥是给用户,私钥是存于服务器上,二者中有一个加密,则需要另外一个来解密。
下面是java实现的一个比较简单的示例:示例中注释写的很详细,可以大致看下,供参考
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.Signature; /** * * @since 2015年8月20日 下午2:22:08 * @author hym */ public class SignDemo { /**得到产生的私钥/公钥对 * @return * @author hym */ public static KeyPair getKeypair(){ //产生RSA密钥对(myKeyPair) KeyPairGenerator myKeyGen = null; try { myKeyGen = KeyPairGenerator.getInstance("RSA"); myKeyGen.initialize(1024); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } KeyPair myKeyPair = myKeyGen.generateKeyPair(); return myKeyPair; } /**根据密钥对对信息进行加密,返回公钥值 * @param mySig * @param myKeyPair * @param infomation * @return * @author hym */ public static byte[] getpublicByKeypair(Signature mySig,KeyPair myKeyPair,byte[] infomation){ byte[] publicInfo=null; try { mySig.initSign(myKeyPair.getPrivate()); //用私钥初始化签名对象 mySig.update(infomation); //将待签名的数据传送给签名对象 publicInfo = mySig.sign(); //返回签名结果字节数组 } catch (Exception e) { e.printStackTrace(); } return publicInfo; } /**公钥验证签名 * @param mySig * @param myKeyPair * @param infomation * @param publicInfo * @return * @author hym */ public static boolean decryptBypublic(Signature mySig, KeyPair myKeyPair,String infomation,byte[] publicInfo){ boolean verify=false; try { mySig.initVerify(myKeyPair.getPublic()); //使用公钥初始化签名对象,用于验证签名 mySig.update(infomation.getBytes()); //更新签名内容 verify= mySig.verify(publicInfo); //得到验证结果 } catch (Exception e) { e.printStackTrace(); } return verify; } public static void main(String[] args) { try { KeyPair keyPair=getKeypair(); Signature mySig = Signature.getInstance("MD5WithRSA");//用指定算法产生签名对象 byte[] publicinfo=getpublicByKeypair(mySig,keyPair,"验证我".getBytes()); boolean verify=decryptBypublic(mySig, keyPair, "验证我", publicinfo); System.out.println("验证签名的结果是:"+verify); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } }
步骤:
1.首先获得公钥/私钥对
2.根据获得公钥/私钥对,根据指定的算法来加密指定的内容,根据私钥加密获得相对应的公钥,公开,给用户;
3.用户根据内容来验证自己是否是跟传来的公钥是一对。。。
相关文章推荐
- 使用eclipse开发web项目中常见的中文乱码问题总结
- An error has occurred. See error log for more details. java.lang.NullPointerException
- JAVA缓存技术
- setInterval()和setTimeout()
- Eclipse 一直提示 loading descriptor for xxx 的解决方法
- MyEclipse10破解后将工程导成war包时报错
- Maven学习总结(七)——eclipse中使用Maven创建Web项目
- Java之观察者模式(Observer Pattern)
- SpringMVC入门----阿冬专栏
- Maven学习总结(六)——Maven与Eclipse整合
- spark-eclipse开发环境搭建
- 折半查找
- java 字符串替换中文逗号
- java 版本 HightCharts demo
- 【转】Java虚拟机详解----GC算法和种类
- 使用hibernate和struts2实现分页功能
- Java文件读写操作指定编码方式 -- 避免乱码
- hadoop实战之HDFS常用JavaAPI
- java的(PO,VO,TO,BO,DAO,POJO)解释
- 使用JAVA实现语音朗读一段文本