如何校验RSA公钥的合法性

    最近在做开放平台相关的项目,外部开发者(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;
    }
}

猜你喜欢

转载自xw-z1985.iteye.com/blog/1732595
今日推荐