我们有一个应用程序可以存储一些数据,除了用户和我们之外,这些数据都不会对其他任何人有价值。因此,我们不需要对其进行加密,但我们确实希望确保没有人对其进行更改。
我认为最简单的方法是从文件内容,日期戳和/或大小生成哈希。直接做md5可能不够好,因为谁想要更改数据只能生成一个新的哈希,所以使用某种键是很好的。有人知道一个简单的方法吗?我想避免使用像crypto ++这样的库,但不要100%反对它。
哦,我们正在用C ++做这个应用程序。
也许,我只需要将一些模糊的数据添加到我们传递给md5函数的任何内容中并完成此操作。你们觉得怎么样?
重申一下,文件没有黑客的有价值的信息,所以没有理由过分安全。我只是想检查设置是否已被搞乱。
谢谢, Angrius。
PS>有没有人知道一个很好的方法来实现可以兼得的md5?
答案 0 :(得分:2)
如果要对数据进行签名,则需要使用密钥和签名算法。可以是像RSA这样的非对称的,也可以是AES等对称的。但是,如果您的应用需要使用它对数据进行签名,则需要将密钥嵌入或以其他方式提供给应用。在这种情况下,潜在的攻击者可以从应用程序中提取它并创建自己的有效签名。你决定这对你是否合适以及你想保护它的程度。
添加“模糊数据”或以其他方式尝试提出自己的算法是一个坏主意,你一定会弄错,特别是如果你没有这方面的经验。请使用标准算法,并考虑如何保护密钥(使用iOS密钥链等)。搜索“RSA sigantures”或“HMAC”以获取有关如何在实践中执行此操作的更多详细信息。如果您无法利用C ++库中的平台加密API(?),则需要使用并链接到第三方库,例如OpenSSL。
答案 1 :(得分: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 ++,它将起作用。如果您的应用不需要任何高级加密,则无需使用任何框架。
干杯, Angrius