1. 程式人生 > >android 接支付寶在4.1版本下報java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D

android 接支付寶在4.1版本下報java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D

今天專案要接入支付寶,心想也就5分鐘的事,沒想到執行起來它就掛,因為之前在上家公司專案也接過,而且接的很順利,沒想到今天接下就報錯: 錯誤日記如下:

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

發生問題的程式碼在這行

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);'//如果在4.1版本後這個就會報錯,要該你成下面的
KeyFactory keyf = KeyFactory.getInstance("RSA", "BC");
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;
}
}

對支付寶真是無語,好歹是阿里巴巴的,中國的驕傲 , 我支付寶demo還是昨天從官網下載的,為什麼使用人這麼多,不更新或者做說明呢?好吧  到此結束,希望能幫到那些遇到同樣問題的同學們