- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要生成一组 10 字节的唯一 ID。这些集合可能非常大(即 10000 个值),并由有限内存设备检查其有效性。所以有人在设备中输入其中一个 ID,设备应该能够辨别该 ID 是否真实(由我生成)。
基本方法是在设备内存中存储同一组 ID 并对照列表进行检查,但我不能使用所有内存。
我认为的第二种方法是使用 CRC 或散列函数:例如,启用 CRC 为 X 的所有 ID。这里的问题是我应该遍历所有可能的 ID 组合以找到提供正确 CRC 的 ID。
理想情况下,我想找到一个/两个这样工作的函数:
uint8_t * generate_ID(uint16_t index);
bool is_valid validate_key(uint8_t * ID);
//optional
uint16_t index find_index(uint8_t * ID);
//example
//generate id value from index 0
uint8_t ID[10] = generate_ID(0)
//id is now {0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b}
bool is_valid = validate_key(ID);
//is_valid is True
uint16_t index = find_index(ID);
//index is now 0
ID[0] = 0xff; //change ID with random value
is_valid = validate_key(ID);
//is_valid is now False
//BONUS: use also a "seed" value, so that I can differentiate through sets of ids:
uint8_t * generate_ID(uint16_t index, uint16_t seed);
bool is_valid validate_key(uint8_t * ID, uint16_t seed);
find_index() 是可选的,因为一旦我知道 key 有效,我就可以简单地遍历所有索引以找到匹配的索引。
基本上,generate_ID() 函数应该足够复杂,这样即使不知道相当数量的 ID 也不会轻易猜到它,但能够在马力有限的嵌入式 CPU (Cortex M0) 上计算
最佳答案
10 字节的 key 不足以保证任何安全。
您需要一个安全的散列函数,例如 SHA2-256,其输出长度为 32 字节。 SHA2 可以很容易地在大多数系统上实现。
您的 key 需要两部分:
[text + hash]
第一部分就像“用户名”,第二部分就像“密码”
您还需要一个“ key ”。此 key 是存储在您的软件中的字节数组。然后,您将“ key ”添加到您的“用户名”。查找结果字符串的 SHA2 哈希。现在您的输出是原始文本的长度 + 32 个字节的哈希值。
您可以将此 key 用作唯一的可验证 ID。
要测试 key 的真实性,请获取“用户名”部分并添加您的 key 。对该字符串进行 SHA2,结果应匹配“密码”
如果保密性和唯一性不是大问题,那么您可以使用输出为 16 字节的 MD5。将纯文本更改为二进制,这样它可以用更少的字节存储更多的信息,而你的最终 key 将只有 20 个字节。您可以再减少一点,但不建议减少到 10 个字节。
这是一个例子。我使用了此链接中的 SHA2 实现:
https://github.com/B-Con/crypto-algorithms(我不确定它是否适用于大端机器)
任何 SHA2 实现都应该有效。
void sha2(BYTE* dst, const BYTE* src, int len)
{
SHA256_CTX ctx;
sha256_init(&ctx);
sha256_update(&ctx, (const BYTE*)src, len);
sha256_final(&ctx, (BYTE*)dst);
}
void create_verifiable_id(const BYTE* source, BYTE *uid)
{
BYTE hash[32];
sha2(hash, source, ID_SIZE);
//combine source + hash
memcpy(uid, source, ID_SIZE);
memcpy(uid + ID_SIZE, hash, 32);
}
int test_verfiable_id(const BYTE *uid)
{
BYTE hash[32];
sha2(hash, uid, ID_SIZE);
//hash should match the second part of uid
return memcmp(hash, uid + ID_SIZE, 32) == 0;
}
int main(void)
{
//use a number from 0 to 0xFFFFFFFF, store in buf (4 bytes)
//this is the "plain text" portion
int number = 0x12345678;
BYTE buf[ID_SIZE];
for(int i = 0; i < sizeof(buf); i++)
{
buf[i] = number & 0xFF;
number >>= 8;
}
//add sha2 to "plain text" to make verifiable id
BYTE verifiable_id[32 + ID_SIZE];
create_verifiable_id(buf, verifiable_id);
printf("UID as hex string:\n");
for(int i = 0; i < 32 + ID_SIZE; i++)
printf("%02X", verifiable_id[i] & 0xFF);
printf("\n");
printf("Test (should succeed): %d\n", test_verfiable_id(verifiable_id));
//change verifiable_id and test it again
verifiable_id[0]++;
printf("Test (should fail): %d\n", test_verfiable_id(verifiable_id));
return 0;
}
关于c - 生成一组可以在不保留白名单的情况下进行验证的唯一 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53338861/
我们有一个 QuickBlox 的企业安装(它是 implements XMPP),并且想在我们的 QuickBlox 服务器安装上为我们的所有用户创建镜像帐户。我们还希望同步我们系统的用户使用在我们
我想将我的 nginx 代理服务器配置为仅允许某些 IP 访问它。 据我所知,这通常是在配置文件中完成的,带有允许和拒绝列表,但如果可能的话,我需要一个不同的选项,因为我的白名单非常大。我还需要将其链
我需要实现 XSS 防御,但遇到了麻烦。我读了这个备忘单 https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Pre
如何将逻辑应用的 IP 地址列入白名单。由逻辑应用程序调用的服务(使用 HTTP 操作),但该服务需要白名单才能调用。那么,如何将逻辑APP列入白名单。 我们可以使用Azure API管理进行白名单,
我正在为 Blackberry 10 应用程序使用 Phonegap 2.8.0。 我无法将 https 网址列入白名单。 其他 URL 正在用于白名单。 http 正常,但 https 总是显示
我有一个基于地理分布式云服务的 Azure 流量管理器。我需要锁定主要是 Web API 的云服务,以便只能访问特定范围或 IP 地址。有办法实现这一点吗?或者可能有一些方法可以限制云服务上的 IP
如何将逻辑应用的 IP 地址列入白名单。由逻辑应用程序调用的服务(使用 HTTP 操作),但该服务需要白名单才能调用。那么,如何将逻辑APP列入白名单。 我们可以使用Azure API管理进行白名单,
我有一个基于地理分布式云服务的 Azure 流量管理器。我需要锁定主要是 Web API 的云服务,以便只能访问特定范围或 IP 地址。有办法实现这一点吗?或者可能有一些方法可以限制云服务上的 IP
我正在为我正在开发的类(class)编写单元测试。另一位开发人员正在为他正在开发的方法的同一类开发其他测试。因此我们的测试发现它们位于同一个 JUnit 测试类中。 所以我想做的是建立一个测试套件来运
如何使用授予 root 权限的应用程序创建白名单?必须在没有任何提示的情况下拒绝其他应用程序。 我正在寻找现有的解决方案或一些有关如何编写具有此功能的应用程序的建议。 最佳答案 您应该结账Superu
有一个银行网站,除非我允许接受所有 cookie,否则我无法登录。我使用的是 Firefox 3.0,我已将其设置为不接受定义列表以外的 cookie(工具 - 选项 - 隐私 - Cookies -
我为我的服务用户提供了一个选项,仅允许从他们可以添加的特定 IP 地址访问他们的帐户。检查的工作原理如下: $conn = new mysqli($servername, $username, $pa
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
这听起来像是一个愚蠢的问题,但我一直无法理解 ATS 和白名单。 我使用 Facebook SDK,所以我按照文档中的说明对我的 .plist 进行了适当的更改,以将 Facebook 服务器列入白名
我正在 Android 上构建一个简单的 Tesseract 应用程序,它的目标是识别简单的命令,如 CALL、MESSAGE 等。因为命令数量少而且固定,所以想把它们加入白名单,这样程序就可以达到更
我目前正在为我们部门创建一些网络应用程序。 该部门是更大的 Intranet 的一部分,当然,它为更多部门提供服务。 我在从未使用过的 PC 上设置了 WAMP 环境,并开发了一些简单的应用程序以供该
所以我有一个包含密码和用户名的凭据对象 payload: Object credentials: Object password: "" username: "" 我想在 redu
所以我想限制对某个网址的访问。现在,如果他们来自给定的 IP 地址,则不应提示他们输入密码。如果他们不是来自给定的 IP 地址,那么系统应该提示他们输入密码。 所以一个或: AuthUserFile
我在网页中使用 Angular(8),并希望将多个 iframe 显示为 innerHTML。 默认情况下, Angular domsanitizer 会删除危险元素。我知道我可以使用 bypassS
我正在尝试将可以访问我的应用程序的 IP 列入白名单。我按照本教程创建了 http-balancer。 https://cloud.google.com/kubernetes-engine/docs/
我是一名优秀的程序员,十分优秀!