如何保护 Android 应用程序中的秘密字符串?

2023-11-24

在我的 Android 应用程序中,我使用 Microsoft 翻译器,它需要两个字符串:clientId 和 clientSecret。目前,我对这两个字符串进行了硬编码。由于我发现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 类:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保护 Android 应用程序中的秘密字符串? 的相关文章

随机推荐

  • 如何开始使用 Solr.NET

    嘿 我想知道如何开始使用 Solr NET 甚至是基础知识 要下载哪些文件等 我当然检查了网络 但就像每个网站都说不同的东西 有些网站比较旧 所以不确定 Cheers 看看这些问题 Solr 可用于 Net 吗 如何安装SOLRNET Se
  • Joda-Time 基于区域设置的日期时间格式

    我从另一个系统收到一个字符串日期 并且我知道该日期的区域设置 也可以从其他系统获得 我想把这个字符串转换成乔达时间 DateTime对象而不明确指定目标模式 例如 我想仅使用区域设置将此字符串 09 29 2014 转换为日期对象 而不是通
  • numpy 数组在 pyglet 中显示不正确

    我在使用 pyglet 显示 numpy 数组时遇到问题 我发现了一个非常相似的主题 如何使用 pyglet 显示 numpy 数组 我用过的 我想以灰度显示数组 但 pyglet 用颜色显示它 请参见图像 https i stack im
  • pycharm 不会对未使用的变量和导入发出警告

    突然我的 pycharm 停止警告未使用的变量或未使用的导入 将这些行着色为灰色 我在设置和检查中到处寻找 找不到问题所在 您可以通过以下方式再次启用它Settings gt Editor gt Inspections and in Pyt
  • cattr_accessor 位于 Rails 之外

    我正在尝试使用谷歌搜索ruby 库 代码如下 但它抱怨 cattr accessor是一个未定义的方法 有什么想法可能是这样或者我如何解决它 require rubygems require google search GoogleSear
  • SQL“LIKE”语法

    我正在编写一个需要在 mysql 和 postgresql 上运行的应用程序 我必须使用like比较一些值 在mysql中LIKE它不区分大小写 在 PostgreSQL 中LIKE它区分大小写并且ILIKE它不区分大小写 如果匹配必须不区
  • HTML 视频自动播放而不静音(或者 youtube 是如何做到的)?

    我知道许多较新的浏览器现在禁用autoplay当视频不存在时muted或将其静音然后播放 如果没有用户交互 也无法调用视频播放 这是可以理解的 但我想知道 youtube 如何仍然能够用声音开始视频 我查了一下 他们确实使用了视频标签 只是
  • Laravel redirect::route 在页面加载之间显示一条消息

    我目前正在使用 Laravel 开发一个网络应用程序 直到最近该应用程序都运行得很好 我不知道是什么触发了它 但这是我遇到的问题的摘要 登录过去可以正常工作 因为我有一个 AccountController 可以执行以下操作 auth Au
  • 实现安全 nullptr

    我想让我的代码在旧版 C 使用 NULL 的 C 代码 和新的 C 11 标准 使用 nullptr 的 C 代码 上都可编译 我正在使用 GCC 但计划在完成最重要的事情时也为 VS 重新编译整个代码库 我是否应该期望 GCC 和 VS
  • 为什么 Files.lines (和类似的 Streams)不会自动关闭?

    Stream 的 javadoc 指出 流有一个 BaseStream close 方法并实现 AutoCloseable 但几乎所有流实例在使用后实际上并不需要关闭 通常 只有源是 IO 通道的流 例如由 Files lines Path
  • 通过多个索引引用 PHP 数组

    这可能是某种奇怪的较长捷径 如果我的思路有误 请纠正我 我有一个数据矩阵 如下所示 unique id url other random data unique id url other random data unique id url
  • 查找数据框中每行的前 N ​​列

    给定一个包含一个描述性列和 X 个数字列的数据框 对于每一行 我想识别具有较高值的 前 N 列 并将其保存为新数据框上的行 例如 考虑以下数据框 df pd DataFrame df index A B C D E F df option1
  • vb.net 应用程序出现 OutOfMemoryException

    在我的 VB Net 应用程序之一中 我在运行该应用程序时遇到错误 这个错误并不总是出现 所以我也无法重现该错误 也没有重现错误的确切顺序 堆栈 System OutOfMemoryException 内存不足 在 System Drawi
  • 在 Visual Studio 2012 中,Librarian 和 Linker 之间有什么区别?

    我正在将我的项目配置为使用 x86 和 x64 位进行构建 为此 我必须更改不同配置的目标计算机 我试图找到为我的本机 C 库设置目标机器的位置 我发现这个帖子 然而我没有Linker在本机 C 库项目中 我有 配置属性 gt Linker
  • 如何在VS 2010中指定单元测试结果的位置?

    我使用VS2010进行单元测试 有谁知道如何指定 VS 2010 放置 TestResults 的位置 默认情况下 它将 TestResults 文件夹放在解决方案文件夹中 我想将其移到其他地方 谢谢 射线 目前 无法从 IDE 内进行控制
  • PyQt4 到 PyQt5 怎么样?

    我的代码是用 PyQt4 创建的 我想将其转换为 PyQt5 我尝试过一些脚本来转换代码 但是 除了名字之外 什么都没有改变 为了使代码与 PyQt5 一起工作 我需要手动更改什么 这是我的代码的第一部分 import sys from p
  • 交叉引用和垃圾收集

    有一个具有广泛对象图的应用程序 该图主要由一组子图组成 这些子图通过唯一引用连接到图的其余部分 但在内部 每个这样的子图在对象之间都有一定数量的交叉引用 有时这样的子图需要被丢弃 只需将指向该子图的唯一引用设置为 null 就足够了吗 我担
  • QuerySet 对象在 Django Rest Framework 上没有属性“user”

    在 Django Rest Framework 上执行请求时 我无法序列化模型来获取结果 模型 py class Karfarma models Model user models OneToOneField User related na
  • C++:对 Singleton 类中的实例的未定义​​引用

    我目前正在尝试将工厂实现为单例 我实际上使用了单例模式的教科书示例 这是 h 文件 namespace oxygen class ImpFactory public static boost shared ptr
  • 如何保护 Android 应用程序中的秘密字符串?

    在我的 Android 应用程序中 我使用 Microsoft 翻译器 它需要两个字符串 clientId 和 clientSecret 目前 我对这两个字符串进行了硬编码 由于我发现classes dex可以转换为jar 然后 class