Example #1
0
  /**
   * 用私钥对信息生成数字签名
   *
   * @param data 需要签名的数据
   * @param privateKey 用来签名的私钥
   * @return 对数据的签名
   * @throws NoSuchAlgorithmException 假如用户的JDK不支持RSA
   * @throws InvalidKeySpecException 假如根据privateKey生成密钥失败
   * @throws InvalidKeyException 假如输入的RSA私钥不合法
   * @throws SignatureException 假如根据privateKey生成密钥失败
   * @throws UnsupportedEncodingException 假如privateKey不是使用UTF-8进行编码
   */
  public static String sign(byte[] data, String privateKey)
      throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException,
          SignatureException, UnsupportedEncodingException {
    // 解密由base64编码的私钥
    byte[] keyBytes = Base64ForServer.base64toByte(privateKey);

    // 构造PKCS8EncodedKeySpec对象
    PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);

    // KEY_ALGORITHM 指定的加密算法
    KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);

    // 取私钥匙对象
    PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);

    // 用私钥对信息生成数字签名
    Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
    signature.initSign(priKey);
    signature.update(data);

    return Base64ForServer.byteToBase64(signature.sign());
  }
Example #2
0
  /**
   * 取得公钥
   *
   * @param keyMap 密钥对Map
   * @return 公钥
   * @throws UnsupportedEncodingException 假如用户的环境不支持UTF-8
   */
  public static String getPublicKey(Map<String, Object> keyMap)
      throws UnsupportedEncodingException {
    Key key = (Key) keyMap.get(PUBLIC_KEY);

    return Base64ForServer.byteToBase64(key.getEncoded());
  }