作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397)
在申请WPS SDK授权版时候需要开发者提供应用包名和签名,应用包名好说,那如何生成符合WPS要求的应用签名(SHA256)呢,经笔者亲测,有如下两种方式可以实现获取第三方应用签名值(SHA256)
1. 方法一:通过keytool命令查询
- 打开cmd命令行窗口
keytool -printcert -jarfile 安装包apk路径
如图所示
将上图标识的SHA256 内容 去掉冒号分割转换成小写即WPS SDK所需要的签名值
2 . 方法二:通过代码获取签名值(工具类)
通过 getAppSignatureSHA256
方法获取签名,这里得到的签名直接是WPS SDK所需要的签名值
//获取当前应用签名(SHA256)
public static String getAppSignatureSHA256(Context context){
try {
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
Signature[] signatures = packageInfo.signatures;
if (signatures != null && signatures.length > 0) {
for(Signature signature : signatures){
return getSHA(signature.toByteArray(),"SHA-256");
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
// Helper method to compute SHA-1 hash
private static String getSHA(byte[] input,String algorithm){
try {
MessageDigest md = MessageDigest.getInstance(algorithm);
byte[] digest = md.digest(input);
return toHexString(digest);
// return Base64.encode(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
//Hex.encodeHexString
private static String toHexString(byte[] data){
int l = data.length;
char[] out = newchar[l << 1];
// two characters form the hex value.
for (int i = 0, j = 0; i < l; i++) {
out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
out[j++] = DIGITS_LOWER[0x0F & data[i]];
}
return new String(out);
}
更多介绍请阅读其它WPS二次开发系列文章,如果能够帮助到您,请动动发财的小手来个一键三连💪,老铁们有兴趣可以加Q群:250325397,吹牛摸鱼嗨起来!