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. android个推消息推送,asp.net调用接口
  2. Android(安卓)API Level 与 Platform Version之间的关系
  3. DrawLayout几个注意点
  4. AES加解密源码(直接可调用)
  5. Android4.4.X调用Alarmmanager接口
  6. android 编译错误解决方法(一)
  7. Android开发笔记: Activity
  8. 安卓控件注入
  9. AndroidStudio调用摄像头

随机推荐

  1. android制作一个简单登入界面的部分代码
  2. android 百度地图SDK 获得详细路线信息
  3. Android sd卡log日志
  4. 我是如何自学Android,资料分享(转)
  5. android避免decodeResource图片时占用太
  6. Android(安卓)SVG矢量图/矢量动画、Vecto
  7. Flutter 与 Android 相互调用、传递参数
  8. ETC1压缩纹理格式详解
  9. android隐藏以及显示软键盘
  10. android个人错误,持续更新