签名算法枚举
/**
*
* 签名算法
*
*/
public class SignatureAlgorithms {
private static final HashMap<String, String> signatureAlgOID = new HashMap<String, String>();
private static final HashMap<String, String> signatureAlg = new HashMap<String, String>();
static {
signatureAlgOID.put("1.2.840.113549.1.1.4", "MD5WithRSA");
/* SHA PKCS #1 v1.5 */
signatureAlgOID.put("1.2.840.113549.1.1.5", "SHA1WithRSA");
signatureAlgOID.put("1.2.840.113549.1.1.11", "SHA256WithRSA");
signatureAlgOID.put("1.2.840.113549.1.1.12", "SHA384WithRSA");
signatureAlgOID.put("1.2.840.113549.1.1.13", "SHA512WithRSA");
/* SHA PKCS #1 v1.5 */
/* 国密 PKCS #1 v1.5 */
signatureAlgOID.put("1.2.156.10197.1.501", "SM3WithSM2");
signatureAlgOID.put("1.2.156.10197.1.502", "SHA1WithSM2");
signatureAlgOID.put("1.2.156.10197.1.503", "SHA256WithSM2");
signatureAlgOID.put("1.2.156.10197.1.504", "SM3WithRSA");
/* 国密 PKCS #1 v1.5 */
/* ECDSA PKCS #1 v1.5 */
signatureAlgOID.put("1.2.840.10045.4.1", "SHA1WithECDSA");
signatureAlgOID.put("1.2.840.10045.4.3.2", "SHA256WithECDSA");
signatureAlgOID.put("1.2.840.10045.4.3.3", "SHA384WithECDSA");
signatureAlgOID.put("1.2.840.10045.4.3.4", "SHA512WithECDSA");
/* ECDSA PKCS #1 v1.5 */
/* SHA3 RSA PKCS #1 v1.5 */
signatureAlgOID.put("2.16.840.1.101.3.4.3.10", "SHA3-256WithRSA");
signatureAlgOID.put("2.16.840.1.101.3.4.3.11", "SHA3-384WithRSA");
signatureAlgOID.put("2.16.840.1.101.3.4.3.12", "SHA3-512WithRSA");
/* SHA3 RSA PKCS #1 v1.5 */
/* SHA3 ECDSA PKCS #1 v1.5 */
signatureAlgOID.put("2.16.840.1.101.3.4.3.10", "SHA3-256WithECDSA");
signatureAlgOID.put("2.16.840.1.101.3.4.3.11", "SHA3-384WithECDSA");
signatureAlgOID.put("2.16.840.1.101.3.4.3.12", "SHA3-512WithECDSA");
/* SHA3 ECDSA PKCS #1 v1.5 */
signatureAlg.put("SHA1WITHRSA", "1.2.840.113549.1.1.5");
signatureAlg.put("SHA256WITHRSA", "1.2.840.113549.1.1.11");
signatureAlg.put("MD5WITHRSA", "1.2.840.113549.1.1.4");
signatureAlg.put("SHA384WITHRSA", "1.2.840.113549.1.1.12");
signatureAlg.put("SHA512WITHRSA", "1.2.840.113549.1.1.13");
signatureAlg.put("SM3WITHSM2", "1.2.156.10197.1.501");
signatureAlg.put("SHA256WITHSM2", "1.2.156.10197.1.503");
signatureAlg.put("SHA1WITHSM2", "1.2.156.10197.1.502");
signatureAlg.put("SM3WITHRSA", "1.2.156.10197.1.504");
signatureAlg.put("SHA1WITHECDSA", "1.2.840.10045.4.1");
signatureAlg.put("SHA256WITHECDSA", "1.2.840.10045.4.3.2");
signatureAlg.put("SHA384WITHECDSA", "1.2.840.10045.4.3.3");
signatureAlg.put("SHA512WITHECDSA", "1.2.840.10045.4.3.4");
signatureAlg.put("SHA3-256WithRSA", "2.16.840.1.101.3.4.3.10");
signatureAlg.put("SHA3-384WithRSA", "2.16.840.1.101.3.4.3.11");
signatureAlg.put("SHA3-512WithRSA", "2.16.840.1.101.3.4.3.12");
signatureAlg.put("SHA3-256WithECDSA", "2.16.840.1.101.3.4.3.10");
signatureAlg.put("SHA3-384WithECDSA", "2.16.840.1.101.3.4.3.11");
signatureAlg.put("SHA3-512WithECDSA", "2.16.840.1.101.3.4.3.12");
}
/**
* 获取签名算法名称
*
* @param oid
* @return
*/
public static String getSignatureName(String oid) {
if (oid == null) {
throw new IllegalArgumentException("Oid cannot be empty");
}
String signName = signatureAlgOID.get(oid);
if (signName == null) {
throw new RuntimeException("Oid does not exist");
}
return signName;
}
/**
* 获取签名算法 oid
*
* @param signName
* 算法名称
* @return
*/
public static String getSignatureOid(String signName) {
if (signName == null) {
throw new IllegalArgumentException("signName cannot be empty");
}
String oid = signatureAlg.get(signName.toUpperCase());
if (oid == null) {
throw new RuntimeException("signName does not exist");
}
return oid;
}
}