欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何校验RSA公钥的合法性

程序员文章站 2022-07-04 14:37:30
...

    最近在做开放平台相关的项目,外部开发者(isv)创建应用前,需要生成一对RSA公私钥对,私钥自己保留,公钥上传给我们。Isv的应用访问公司服务时,需要用私钥对请求进行加签,然后我们用他之前提供的公钥进行验签。

      isv将公钥上传后,需要对公钥的合法性进行验证,以下是验证工具类

 

 

/**
 * RSA密钥合法性验证器
 * 
 * @author xianwu.zhang
 * @version $Id: RSAkeyChecker.java, v 0.1 2012-10-29 下午04:59:09 xianwu.zhang Exp $
 */
public class RSAkeyChecker {
    /** 日志 */
    private static final Logger logger = LoggerFactory.getLogger(RSAkeyChecker.class);

    /**
     * 检查公钥的合法性
     * 
     * @param key   经过base64编码的公钥key
     * @return  生成公钥未抛异常,则返回<code>true</code>,否则返回<code>false</code>
     */
    public static boolean checkPublicKey(String key) {
        if (StringUtil.isBlank(key)) {
            return false;
        }

        try {
            getPublicKey(key);
            return true;
        } catch (Exception e) {
            logger.error("RSA公钥合法性校验失败", e);
            return false;
        }

    }

    /**
     * 生成RSA公钥
     * 
     * @param key   经过base64编码的公钥key
     * @return  rsa公钥
     * @throws Exception    key不合法,则抛异常
     */
    public static PublicKey getPublicKey(String key) throws Exception {
        byte[] keyBytes = (byte[]) Base64.decodeBase64(key.getBytes());
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(keySpec);
        return publicKey;
    }
}