1

我们有一个应用程序可以在本地存储一些数据,除了用户和我们之外,这些数据对其他任何人都没有价值。所以,我们不需要加密它,但我们确实想确保没有人改变它。

我认为最简单的方法是从文件内容、日期戳和/或大小生成散列。直接做 md5 可能还不够好,因为想要更改数据的人可能只会生成一个新的哈希,所以使用某种密钥会很好。有谁知道一个简单的方法来做到这一点?我想避免使用诸如crypto++之类的库,但不是100%反对它。

哦,我们正在用 C++ 编写应用程序。

也许,我只需要向我们传递给 md5 函数的任何内容添加一些晦涩的数据并完成此操作。你们有什么感想?

重申一下,文件对黑客来说没有有价值的信息,因此没有理由过度安全。我只是想检查设置是否被弄乱了。

谢谢,安格里厄斯。

PS> 有谁知道实现 md5 的好方法,这两者都适用?

4

2 回答 2

2

如果要对数据进行签名,则需要使用密钥和签名算法。要么是像 RSA 这样的非对称算法,要么是像 AES 这样的对称算法。但是,如果您的应用程序需要使用它签署数据,则需要嵌入密钥或以其他方式提供给应用程序。在这种情况下,潜在的攻击者可以从应用程序中提取它并创建自己的有效签名。您决定这是否适合您,以及您想在多大程度上保护它。

添加“模糊数据”或以其他方式尝试提出自己的算法是一个坏主意,您一定会弄错,尤其是如果您没有该领域的经验。请务必使用标准算法,并考虑如何保护密钥(使用 iOS 密钥链等)。搜索“RSA 签名”或“HMAC”以获取有关如何在实践中执行此操作的更多详细信息。如果您无法利用 C++ 库中的平台加密 API(?),您将需要使用并链接到第三方库,例如 OpenSSL。

于 2012-10-02T02:55:15.860 回答
1

做我想做的最简单的方法是实现基本的 HMAC (http://en.wikipedia.org/wiki/Hash-based_message_authentication_code)。您甚至可以将此哈希存储在配置文件本身中,虽然这有点复杂,但非常简洁。

事实证明,iOS 和 Android 都内置了库来执行基本的 SHA1、MD5 等。它们也都支持 HMAC。所以对于 iOS,你会做这样的事情:

#include <CommonCrypto/CommonHMAC.h>

string createHMAC( string key, string text )
{
    string result;

    const char *cKey  = key.c_str();
    const char *cData = text.c_str();
    unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];

    CCHmac( kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC );

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    {
        [output appendFormat:@"%02x", cHMAC[i]];
    }
    result = string( [output UTF8String] );

    return result;
}

由于这是 Objective-c 代码,您可以将其编译为 Objective-C++ 并且它会工作。如果您的应用不需要任何高级密码学,则无需使用任何框架。

干杯,安格里斯

于 2012-10-04T18:08:08.263 回答