Java 簽名(SHA1WithRSA、SHA256WithRSA、SHA256withECDSA)

RSA一、RSA256 簽名

 1  public static String MakeSign(String Data) {  2 
 3     try {  4       byte[] data = Data.getBytes();  5       byte[] keyBytes = base64String2Byte(PrivateKey);  6 
 7       PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);  8 
 9       KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 10 
11       PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); 12     
13       Signature signature = Signature.getInstance("SHA256withRSA");//這個根據需求填充SHA1WithRSA或SHA256WithRSA 14  signature.initSign(priKey); 15  signature.update(data); 16 
17       return byte2Base64String(signature.sign()); 18     } catch (Exception e) { 19       return ""; 20  } 21   }
1 // base64字符串轉字節數組
2   public static byte[] base64String2Byte(String base64Str) { 3     return Base64.decodeBase64(base64Str); 4   }

 

RSA一、RSA256 驗籤

 1     public static boolean VeriSign(String Data_ori, String Singnature) {  2       try {  3         byte[] signed = base64String2Byte(Singnature);  4       
 5         X509EncodedKeySpec keySpec = new X509EncodedKeySpec(base64String2Byte(PublicKey));  6         KeyFactory keyFactory = null;  7         keyFactory = KeyFactory.getInstance("RSA");  8         PublicKey publicKey = keyFactory.generatePublic(keySpec);  9 
10         Signature signature2 = Signature.getInstance("Sha256WithRSA");//這個根據需求填充SHA1WithRSA或SHA256WithRSA 11    signature2.initVerify(publicKey); 12         signature2.update(Data_ori.getBytes("UTF-8")); 13         boolean verify = signature2.verify(signed); 14         return verify; 15       } catch (Exception e) { 16         return false; 17    }
18   }

 

SHA256withECDSA驗籤

 1  public static boolean verifySign(String _data, String _key, String _sign) {  2 
 3         try {  4             java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(  5                     new BASE64Decoder().decodeBuffer(_key));  6             KeyFactory keyf = KeyFactory.getInstance("EC"); //ECC 可根據需求更改
 7             PublicKey publicKey = keyf.generatePublic(bobPubKeySpec);  8 
 9             byte[] data = hexStringToBytes(_data); 10             byte[] sig = hexStringToBytes(_sign); 11 
12             Signature signer = Signature.getInstance("SHA256withECDSA"); 13  signer.initVerify(publicKey); 14  signer.update(data); 15             return (signer.verify(sig)); 16  } 17         catch(Exception ex) 18  { 19  System.out.println(ex.getMessage()); 20             return false; 21         }

 

 1  public static String bytesToHexString(byte[] src) {  2         StringBuilder stringBuilder = new StringBuilder("");  3         if (src == null || src.length <= 0) {  4             return null;  5  }  6         for (int i = 0; i < src.length; i++) {  7             int v = src[i] & 0xFF;  8             String hv = Integer.toHexString(v);  9             if (hv.length() < 2) { 10                 stringBuilder.append(0); 11  } 12  stringBuilder.append(hv); 13  } 14         return stringBuilder.toString(); 15  } 16 
17     public static byte[] hexStringToBytes(String hexString) { 18         if (hexString == null || hexString.equals("")) { 19             return new byte[0]; 20  } 21         hexString = hexString.toUpperCase(); 22         int length = hexString.length() / 2; 23         char[] hexChars = hexString.toCharArray(); 24         byte[] d = new byte[length]; 25         for (int i = 0; i < length; i++) { 26             int pos = i * 2; 27             d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); 28  } 29         return d; 30  } 31 
32     public static byte charToByte(char c) { 33         return (byte) "0123456789ABCDEF".indexOf(c); 34     }
HEX和Byte[]互轉
相關文章
相關標籤/搜索