note  Java HmacSHA256加密

适用 Java / Android

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

// https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java
private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars);
}

//https://stackoverflow.com/questions/7124735/hmac-sha256-algorithm-for-signature-calculation
private String HmacSHA256(String content, String salt){
String result = "";
try {
String secret = salt;
String message = content;

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);

byte[] temp = sha256_HMAC.doFinal(message.getBytes());
result = bytesToHex(temp);
}
catch (Exception e){
System.out.println("Error");
}
return result;
}
note  Cordova Plugin

参考资料

note  Android apk 防止篡改

背景:android版 app 被二次打包,功能可以正常使用,不法分子将恶意代码嵌入,导致数据不安全问题。

Cordova App 的主要源码为 assets文件夹 下HTML(资源文件)

所以我们需要的加密防止篡改只需要保护 和确认 assets文件夹未被修改过即可

assets 资源防篡改付费方案(2019-9-12)

腾讯乐固仅企业版支持,收费:

APP个数价格
118w

360加固,收费:

APP个数价格
111.8w (*现在是5折)
note  Cordova 笔记

环境及配置

JDK 依赖

zulu jdk 下载: https://www.azul.com/downloads/zulu-community/?architecture=x86-64-bit&package=jdk

由于 oracle jdk 开始收费,我们已经开始使用 openjdk 或 zulujdk
使用 openjdk 遇到证书问题:the trustAnchors parameter must be non-empty
转用 zulu jdk 即解决

note  web 密码加密传输

html javascript

引入:https://github.com/brix/crypto-js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var key = CryptoJS.enc.Utf8.parse("aabbccddeeffgghh");  //十六位十六进制数作为密钥
var iv = CryptoJS.enc.Utf8.parse('aabbccddeeffgghh'); //十六位十六进制数作为密钥偏移量

//解密方法
function Decrypt(word) {
var encryptedHexStr = CryptoJS.enc.Base64.parse(word);
var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
var decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}

//加密方法
function Encrypt(word) {
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
var result = encrypted.toString();
return result;
}