MD5withRSA算法加密


私鑰計算

 public static PrivateKey getPrivateKey(String key) {
          byte[] keyBytes;
          keyBytes = java.util.Base64.getDecoder().decode(key);
          PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
          KeyFactory keyFactory;
          try {
               keyFactory = KeyFactory.getInstance("RSA");

               PrivateKey priKey;

               priKey = keyFactory.generatePrivate(keySpec);

               return priKey;
          } catch (InvalidKeySpecException e) {
               System.out.println("InvalidKeySpecException[私鑰]:" + e.getStackTrace());
          }catch (NoSuchAlgorithmException e) {
               System.out.println("NoSuchAlgorithmException[私鑰]:" + e.getStackTrace());
          }
          return null;

     }

公鑰計算

     public static PublicKey getPublicKey(String key) {
          byte[] keyBytes;
          keyBytes = java.util.Base64.getDecoder().decode(key);
          X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
          KeyFactory keyFactory;

          try {
               keyFactory = KeyFactory.getInstance("RSA");

               PublicKey pubKey;

               pubKey = keyFactory.generatePublic(keySpec);

               return pubKey;
          } catch (InvalidKeySpecException e) {
               System.out.println("InvalidKeySpecException[公鑰]:" + e.getStackTrace());
          }catch (NoSuchAlgorithmException e) {
               System.out.println("NoSuchAlgorithmException[公鑰]:" + e.getStackTrace());
          }
          return null;

     }

用md5生成內容摘要,再用RSA的私鑰加密,進而生成數字簽名

static String getMd5Sign(String content , PrivateKey privateKey) throws Exception {
          byte[] contentBytes = content.getBytes("utf-8");
          // 返回MD5withRSA簽名算法的 Signature對象
          Signature signature = Signature.getInstance("MD5withRSA");
          signature.initSign(privateKey);
          signature.update(contentBytes);
          byte[] signs = signature.sign();
          return Base64.encodeBase64String(signs);
     }

對用md5和RSA私鑰生成的數字簽名進行驗證

  static boolean verifyWhenMd5Sign(String content, String sign, PublicKey publicKey) throws Exception {
          byte[] contentBytes = content.getBytes("utf-8");
          Signature signature = Signature.getInstance("MD5withRSA");
          signature.initVerify(publicKey);
          signature.update(contentBytes);
          return signature.verify(Base64.decodeBase64(sign));
     }

測試


public static void main(String[] args)  throws Exception {
          String content = "ZGF0YT17ImJhdGNoTnVtYmVyIjoiMjAyMTA0MjUxMzM3MDExMTAxMDExMyIsIm1kNSI6WyJiYmQ1ZDg5MzgzNTVlZTY1M2Y4MjdiYWFmODdlMzQ2MSIsImE2ODBkMDQ0NWMxNjVmYjQyYjQ0OTc2ZjZkNGEzN2ViIiwiYzlkYzM2OTgzM2RiOTMxMWQyMDFlN2JlNjFhODc2NDQiXX0mZmlsZVVzZXI9ZGVtb1VzZXJOYW1lJnJlcXVlc3RJZD04YTlhMTcxNWQ5OTQ0YTIyM2ExZDE3N2Y3YjlhMjEyNyZ0aW1lc3RhbXA9MTYwOTEzNDczNTczNA==";
          
          PublicKey publicKey = getPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSeFx6/ew7RWYlL2YmUkwa5gFu/lhBTQjQ+vi4+VIgBDpl2pGrB+NpHqn8eQBLZqV7REVADR8877jH/MQXwylJ7jL/v19Cr/vNIniE1v9W134/oIR3M9JMhlvFlO5+2xJppS4OoOzbF795OCbETWwaBV5vmP8rOBsbz6V7jxloPwIDAQAB");
          PrivateKey privateKey =  getPrivateKey("MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANJ4XHr97DtFZiUvZiZSTBrmAW7+WEFNCND6+Lj5UiAEOmXakasH42keqfx5AEtmpXtERUANHzzvuMf8xBfDKUnuMv+/X0Kv+80ieITW/1bXfj+ghHcz0kyGW8WU7n7bEmmlLg6g7NsXv3k4JsRNbBoFXm+Y/ys4GxvPpXuPGWg/AgMBAAECgYArqcSlz1/eu/sA4+BxOsmHGwhZGnL8uRqHIEnRNggPlFD5KGrn7G8FM9NYCVJCUj0qYXNsYkyEu8a91nZn55j82OW86sG8IlnNsfyQF4PyxcbLfx/Z/QRVB9eli/FS9mJxzQG4rbAl78JHv9Bd4OSxv1wvtxLFlbDHfYJ/9Fpe4QJBAPfAtHZyhtESL72FoE2VZHjap9eXbgCoxqskkL7Z/h/CpWkSRs2RII9L7DOYak6CoobucQAeYGwtONZwgf/y4SUCQQDZefEygYEfWMfgbMpmiqqPkKogOtESqD3ZxZpyFNMiF4B14pVzPTuNMTTbu4Jqt2g0I6QoAes/y+WRAc65z6CTAkEAo733B3m15KPybX3NbrlXyBArce+hQkpJ0369M4X70J3imMj9hotuS4bQO2F2kSEBrdAVWxC4hYZ11DRTlwe9CQJBAK3LEmKPNbXsSAbkSbc6d2U1cY9CEZR8WLkwfeVPGQ70gxcyFMa8F1wVB63VojpQCXkpRmUma25XLkT8kczRzPsCQQD130tvHXHd0YQw0qhBRZyO/ZbWUrWhFhl/MJwKOL+xAWhwA27dv7DyLkEFIImHiVK1vlwClt6NrQpOupNHOsrL");

          String md5Sign  = getMd5Sign(content,privateKey);
          System.out.println("MD5withRSA算法的簽名 :"+ md5Sign);
          boolean md5Verifty = verifyWhenMd5Sign(content,md5Sign,publicKey);
          System.out.println("MD5withRSA算法的簽名驗簽結果 :"+ md5Verifty);

     }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM