验证签名机制——java示例
2016-04-10 18:28
477 查看
简单的验证公钥私钥签名认证;
公钥是对外公开的部分,私钥是不公开的部分,一般在项目开发中公钥是给用户,私钥是存于服务器上,二者中有一个加密,则需要另外一个来解密。
下面是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.用户根据内容来验证自己是否是跟传来的公钥是一对。。。
相关文章推荐
- 20145223《Java程序设计》第6周学习总结
- java正则表达式
- Eclipse中添加PyDev插件
- java连接MYSQL
- eclipse安装maven
- Eclipse上安装GIT插件EGit
- Openstack学习笔记(六)-Ubuntu下安装JDK和Eclipse
- Java NIO - Condition
- Java中@Override的作用
- Java中@Override的作用
- 20145327高晨 实验一 "Java开发环境的熟悉"
- 关于java“配置环境变量”的那些事
- JAVA实验一20145315
- 关于Spring事务回滚的配置及使用
- Java泛型的理解
- Java调用ICTCLAS2016 之中文分词
- Java中通过反射获取类的信息(方法名,参数,构造函数等)
- 20145233韩昊辰 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)
- 20145304 Java第六周学习报告
- spring security:第一个程序