我在android上做了一个应用程序。我使用一些网址在我的服务器上请求,但我不知道如何在我的应用程序中保护或隐藏这些网址。 有人能帮助我吗?
答案 0 :(得分:2)
我也做过类似的事情。你要做的是......
1)您应该有一个Web服务,它将为您提供服务的URL
2)加密您的主Web服务URL并隐藏密码内部代码。
3)用户程序来模糊你的代码。
4)当您加载应用时,点击主网址并获取其他网址
5)获取解密密钥,就像你将URL保留在内存中一样,任何人都可以获得内存转储
6)在需要时解密URL。
其他选择是......
Using Cryptography to Store Credentials Safely
private final static String ALGORITM = "Blowfish";
private final static String KEY = "2356a3a42ba5781f80a72dad3f90aeee8ba93c7637aaf218a8b8c18c";
private final static String PLAIN_TEXT = "here is your text";
public void run(View v) {
try {
byte[] encrypted = encrypt(KEY, PLAIN_TEXT);
Log.i("FOO", "Encrypted: " + bytesToHex(encrypted));
String decrypted = decrypt(KEY, encrypted);
Log.i("FOO", "Decrypted: " + decrypted);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
}
private byte[] encrypt(String key, String plainText) throws GeneralSecurityException {
SecretKey secret_key = new SecretKeySpec(key.getBytes(), ALGORITM);
Cipher cipher = Cipher.getInstance(ALGORITM);
cipher.init(Cipher.ENCRYPT_MODE, secret_key);
return cipher.doFinal(plainText.getBytes());
}
private String decrypt(String key, byte[] encryptedText) throws GeneralSecurityException {
SecretKey secret_key = new SecretKeySpec(key.getBytes(), ALGORITM);
Cipher cipher = Cipher.getInstance(ALGORITM);
cipher.init(Cipher.DECRYPT_MODE, secret_key);
byte[] decrypted = cipher.doFinal(encryptedText);
return new String(decrypted);
}
public static String bytesToHex(byte[] data) {
if (data == null)
return null;
String str = "";
for (int i = 0; i < data.length; i++) {
if ((data[i] & 0xFF) < 16)
str = str + "0" + java.lang.Integer.toHexString(data[i] & 0xFF);
else
str = str + java.lang.Integer.toHexString(data[i] & 0xFF);
}
return str;
}
答案 1 :(得分:0)
我这样使用它。我开始使用AES算法加密URL,并使用密钥AES来获取URL的字节数组。
byte[] b = {-52, -42, -105, 86, 110, -111, -59, 126, 97, -70, 12, 67, -121, 75, -97, 76, 82, -29, -25, -87, 77, 21, 19, 73, 45, -28, -20, -61, 34, 121, -27, -22, -25, 34, 2, -80, 48, -118, -109, -63, -26, 72, -42, -79, -75, -82, -52, -6, 118, 25, 48, 48, 47, -54, -42, -13, -83, 37, 118, -100, -1, -38, 127, 8, 22, -124, -25, -33, -18, -2, -31, -55, -25, 2, -46, 19, 36, -2, 76, 100};
我将URL转换为字节数组,我只在应用程序中保存字节数组。当我需要时,我使用AES算法和密钥AES将字节数组转换为URL。
答案 2 :(得分:-1)
您可以尝试模糊字符串资源(使用 Progaurd )但是您需要投入多少精力来使您的资源(如URL)安全,总有一种方法可以反编译和检索硬编码来自您的应用程序的数据。除了依赖在应用程序中保护您的URL之外,请尝试保护您的服务器,以便只能通过您的授权用户访问它。 如果你仍想让攻击者生活困难你可以学习this link
.apk
很容易被分解(see this online website),即使你会使用一些可以使用的算法,一个坚定的攻击者可以破解它,因为他可以下载你的.apk和普通用户一样可以访问其中的一切。还Give an eye to this
答案 3 :(得分:-1)