在我的 android 应用程序中,我使用需要两个字符串 clientId 和 clientSecret 的 Microsoft 翻译器。目前,我对这两个字符串进行了硬编码。由于我发现classes.dex可以转为jar,然后.class文件也可以转为.java文件,我认为硬编码那些敏感的字符串并不是一件好事。
所以我的问题很简单:如何向恶意人员隐藏这些字符串?
谢谢
在我的 android 应用程序中,我使用需要两个字符串 clientId 和 clientSecret 的 Microsoft 翻译器。目前,我对这两个字符串进行了硬编码。由于我发现classes.dex可以转为jar,然后.class文件也可以转为.java文件,我认为硬编码那些敏感的字符串并不是一件好事。
所以我的问题很简单:如何向恶意人员隐藏这些字符串?
谢谢
预加密字符串并将其存储在资源文件中。使用密钥对其进行解密。这只是通过默默无闻的安全性,但至少“秘密”不会是纯文本。
public class KeyHelper {
/**
* Encrypt a string
*
* @param s
* The string to encrypt
* @param key
* The key to seed the encryption
* @return The encrypted string
*/
public static String encode(String s, String key) {
return base64Encode(xorWithKey(s.getBytes(), key.getBytes()));
}
/**
* Decrypt a string
*
* @param s
* The string to decrypt
* @param key
* The key used to encrypt the string
* @return The unencrypted string
*/
public static String decode(String s, String key) {
return new String(xorWithKey(base64Decode(s), key.getBytes()));
}
private static byte[] xorWithKey(byte[] a, byte[] key) {
byte[] out = new byte[a.length];
for (int i = 0; i < a.length; i++) {
out[i] = (byte) (a[i] ^ key[i % key.length]);
}
return out;
}
private static byte[] base64Decode(String s) {
try {
return Base64.decode(s);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static String base64Encode(byte[] bytes) {
return Base64.encodeBytes(bytes).replaceAll("\\s", "");
}
}
另请注意,此示例要求您在项目中包含 Base64 类:)