我见过一些 Android 应用程序使用ANDROID_ID(SSAID - 安全设置 Android ID)作为轻量级工具来计算只有该应用程序/设备/用户知道的加密密钥,以保护静态数据。虽然我看不出任何明显的弱点(假设设备没有根植,因为所有ANDROID_IDs 都可以枚举),但文档没有涉及这个主题(建议反对它的事件)。因此,我想知道是否有人知道该计划有任何问题?
——
下面是一些关于为什么它在非 root 设备上看起来是安全的动机。
——
Android 开发人员文档(针对 API > 26)说明了有关ANDROID_ID的以下内容:
在 Android 8.0(API 级别 26)和更高版本的平台上,一个 64 位数字(表示为十六进制字符串),对于应用签名密钥、用户和设备的每个组合都是唯一的。ANDROID_ID 的值受签名密钥和用户的限制。如果在设备上执行恢复出厂设置或 APK 签名密钥更改,则该值可能会更改。
博客文章中还有以下内容:
在 O 中,Android ID(Settings.Secure.ANDROID_ID 或 SSAID)对于每个应用程序和设备上的每个用户都有不同的值。需要设备范围标识符的开发人员应改用可重置的标识符,例如广告 ID,为用户提供更多控制权。广告 ID 还提供面向用户的设置以限制广告跟踪。另外在 Android O 中:
- 只要软件包名称和签名密钥相同,ANDROID_ID 值在软件包卸载/重新安装时就不会改变。应用程序可以依靠此值在重新安装时保持状态。
- 如果应用安装在运行较早版本 Android 的设备上,当设备更新到 Android O 时,Android ID 保持不变,除非卸载并重新安装该应用。
- 仅当设备恢复出厂设置或签名密钥在卸载和重新安装事件之间轮换时,Android ID 值才会更改。
- 此更改仅适用于随附 Google Play 服务和广告 ID 的设备制造商。其他设备制造商可能会提供替代的可重置 ID 或继续提供 ANDROID ID。
而且,查看了计算SSAID的SettingsProvider.java的源码,好像流程如下:
我正在尝试显示一个div使用white-space: pre样式并允许编辑的样式。
但是,每次从键盘插入新行,然后使用获取innerText2 个新行而不是 1 个新行从 div 读回内容。我知道浏览器隐式地将行换行在<div>'s 中并插入<br>'s 。但是,我不确定如何获得div准确的文本表示。
例如演示。下面,输入1<return>2<return><return>3可编辑的div后,得到以下内容(其中第二个是innerText两个divs之间的直接复制,第三个是实际innerHTML显示的):

我整理了一个简单的小提琴来显示这一点: https: //jsfiddle.net/mv2h4Lnp/1/
这听起来很像FireFox 从“使用”更改br为div“在生成的标记中”时遇到的问题。然而,该文章中提出的解决方案是 FireFox 特定的,本质上使 FireFox 的行为与更改为在 s 中换行之前一样div。
我还注意到以下 SO 问题`contenteditable` 和 `white-space: pre-wrap` - 换行符插入和/sf/answers/3844838371/给出了最好处理 onkeydown事件和处理的建议使用新行而不是留给浏览器。
以此为基础,我更新了小提琴以使用上述文章中的想法: https: //jsfiddle.net/mv2h4Lnp/2/
本质上,以下代码用于拦截返回键:
document.getElementById('ss').addEventListener("keydown", e => {
if (e.which == 13) {
e.stopPropagation();
e.preventDefault();
document.execCommand('insertHTML', …Run Code Online (Sandbox Code Playgroud)