android支付宝 KeyFactory PrivateKey

public class SignUtils {java


private static final String ALGORITHM = "RSA";android


private static final String SIGN_ALGORITHMS = "SHA1WithRSA";ide


private static final String DEFAULT_CHARSET = "UTF-8";spa


public static String sign(String content, String privateKey) {code

try {get

PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(it

Base64.decode(privateKey));io

KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);ast

PrivateKey priKey = keyf.generatePrivate(priPKCS8);class


java.security.Signature signature = java.security.Signature

.getInstance(SIGN_ALGORITHMS);


signature.initSign(priKey);

signature.update(content.getBytes(DEFAULT_CHARSET));


byte[] signed = signature.sign();


return Base64.encode(signed);

} catch (Exception e) {

e.printStackTrace();

}


return null;

}


}


第一开始,调用KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);报错。以下:

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag


KeyFactory keyf = KeyFactory.getInstance(ALGORITHM, "BC");  加入了“BC”报以下错误:

com.android.org.bouncycastle.jcajce.provider.asymmetric.util.ExtendedInvalidKeySpecException: unable to process key spec: java.lang.ClassCastException: com.android.org.bouncycastle.asn1.DLSequence cannot be cast to com.android.org.bouncycastle.asn1.ASN1Integer


最终由于传入私钥错误。须要从新生成私钥:

私钥的格式大约是这样:

相关文章
相关标签/搜索