简单的验证公钥私钥签名认证;

公钥是对外公开的部分,私钥是不公开的部分,一般在项目开发中公钥是给用户,私钥是存于服务器上,二者中有一个加密,则需要另外一个来解密。

下面是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.用户根据内容来验证自己是否是跟传来的公钥是一对。。。

怀有希望!!

验证签名机制——java示例的更多相关文章

  1. openssl生成签名与验证签名

    继上一篇RSA对传输信息进行加密解密,再写个生成签名和验证签名. 一般,安全考虑,比如接入支付平台时,请求方和接收方要互相验证是否是你,就用签名来看. 签名方式一般两种,对称加密和非对称加密.对称加密 ...

  2. 左右JAVA示例代码事件分发和监督机制来实现-绝对原创有用

    文章标题:左右JAVA示例代码事件分发和监督机制来实现 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy201 ...

  3. Android签名机制之---签名过程详解

    http://www.2cto.com/kf/201512/455388.html 一.前言 又是过了好长时间,没写文章的双手都有点难受了.今天是圣诞节,还是得上班.因为前几天有一个之前的同事,在申请 ...

  4. Android签名机制之---签名验证过程具体解释

    一.前言 今天是元旦,也是Single Dog的嚎叫之日,仅仅能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是怎样验证一个Apk的签名. 在前一篇文章中 ...

  5. Android签名机制之---签名验证过程详解

    一.前言 今天是元旦,也是Single Dog的嚎叫之日,只能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是如何验证一个Apk的签名.在前一篇文章中我们 ...

  6. C#.NET RSA 私钥签名 公钥验证签名

    C#.NET RSA 私钥签名 公钥验证签名 公钥验签 1.待签名字符串转为byte数组时,一般使用UTF8. 2.将私钥字符串(PKCS8或PKCS1格式)转为C#.NET的RSACryptoSer ...

  7. 【转】漫谈iOS程序的证书和签名机制

    转自:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...

  8. 漫谈iOS程序的证书和签名机制

    接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕和崇拜.于是,花了一点时间去研究了一下 ...

  9. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

随机推荐

  1. 无法打开工作组信息文件中的表 'MSysAccounts',一个十分搞笑的解决方法

    问题提出:从access97导出一个mdb到access2000 为了程序使用命名为system.mdb,后改名为system.dat 在c#中打开,出现 无法打开工作组信息文件中的表 'MSysAc ...

  2. pta l3-3(社交集群)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805053141925888 题意:给定n个人,以及每个人的兴趣 ...

  3. Dbutils 连接数据库

    用了JDBC后接着学习Dbutils连接数据库 1.添加驱动包 Class.forName("oracle.jdbc.driver.OracleDriver"); 2.获取数据库连 ...

  4. Cisco ASR1002-X告警处理

    客户反馈其机房的ASR100X告警,拍照如下图: 处理步骤: 查看日志未发现异常 查看CPU/内存/风扇未发现异常 3.清除告警#clear facility alarm依旧告警 4.shutdown ...

  5. ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号

    异常如下: ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法: 添加如下meta标签,即可解决: <meta name= ...

  6. Python常用库大全,看看有没有你需要的

    作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  7. [剑指Offer]22-链表中倒数第k个结点

    题目链接 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&t ...

  8. FortiGate设备管理

    1.Web管理 1.FortiGate出厂配置 默认地址为192.168.1.99,可以通过https的方式进行web管理(默认用户名admin,密码为空).不同型号设备用于管理的接口略有不同,如: ...

  9. 关于viewport我自己的理解

    其实即使不在html中添加meta viewport标签,每个移动端浏览器都会有一个默认的viewport,只是这个viewport的宽度是980,然后做1:3或者1:2的自动缩放.所以当不在html ...

  10. ubuntu下tomcat的安装及注册成系统服务

    在ubuntu下tomcat的安装有两种方式,第一种是下载二进制文件,解压安装:第二种则是使用apt-get自动下载.这里不推荐第二种方法安装,因为这种方法安装会像天女散花一样把安装的文件散落在系统的 ...