验证签名机制——java示例

    xiaoxiao2025-10-17  10

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

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

    下面是java实现的一个比较简单的示例:示例中注释写的很详细,可以大致看下,供参考

     

    [java]  view plain  copy  print ? 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.用户根据内容来验证自己是否是跟传来的公钥是一对。。。

    转载请注明原文地址: https://ju.6miu.com/read-1303247.html
    最新回复(0)