android支付宝 KeyFactory PrivateKey

来源:互联网 发布:人脉关系网软件 编辑:程序博客网 时间:2024/06/16 16:18

public class SignUtils {

private static final String ALGORITHM = "RSA";

private static final String SIGN_ALGORITHMS = "SHA1WithRSA";

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

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

try {

PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(

Base64.decode(privateKey));

KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);

PrivateKey priKey = keyf.generatePrivate(priPKCS8);


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


最终因为传入私钥错误。需要重新生成私钥:

私钥的格式大约是这样:







记录下支付宝开发过程。想说的是,网上的文档真的是层出不穷。但是由于版本升级问题。所以很多网上的文档描述其实是错误的。记录下。开发过程中遇到的一些小问题。


1.开发流程图就不记录了。直接上一个链接。http://blog.it985.com/12276.html 这个就可以了。写的很详细

2.遇到的问题,无法执行。解决办法:工具类SignUtils 里面的KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);改为KeyFactory keyf = KeyFactory.getInstance(ALGORITHM,"BC"); 至于为什么。可以百度下公钥私钥加密相关文档。

3.空指针问题。 这个绝对是私钥出错了。私钥如何来?私钥一定不要用开发工具在dos下生成的位于bin目录下的pem那个文件。因为那个是并没有将RSA私钥转换成PKCS8格式。所以我们的私钥,需要的是cmd里面的那一串。超级长的什么鬼。

4.以上是遇到的两个小问题。昨晚百度一夜。发现基本都是这两个问题。但是解决办法都不一。记录下。为以后开发少走弯路。
0 0
原创粉丝点击