1

一部のデータをローカルに保存するアプリがありますが、このデータはユーザーと私たち以外の誰にとっても価値がありません。したがって、暗号化する必要はありませんが、誰も変更していないことを確認したいと思います。

これを行う最も簡単な方法は、ファイルの内容、日付スタンプ、サイズからハッシュを生成することだと思いました。データを変更したい人は新しいハッシュを生成するだけなので、md5をまっすぐに実行するだけではおそらく十分ではありません。そのため、ある種のキーを使用すると便利です。誰かがこれを行う簡単な方法を知っていますか?crypto ++などのライブラリの使用は避けたいのですが、100%ではありません。

ああ、私たちはC++でアプリをやっています。

たぶん、md5関数に渡すものにあいまいなデータを追加して、これで済ませることができます。皆さんはどう思いますか?

繰り返しになりますが、ファイルにはハッカーにとって価値のある情報がないため、セキュリティを過剰に利用する理由はありません。設定がめちゃくちゃになっていないか確認したいだけです。

ありがとう、アングリウス。

PS>誰かが両方で動作するmd5を実装するための良い方法を知っていますか?

4

2 に答える 2

2

データに署名する場合は、キーと署名アルゴリズムを使用する必要があります。RSAのような非対称のもの、またはAESのような対称的なもののいずれか。ただし、アプリでデータに署名する必要がある場合は、キーを埋め込むか、アプリで利用できるようにする必要があります。その場合、潜在的な攻撃者はアプリからそれを抽出し、独自の有効な署名を作成することができます。あなたはそれがあなたにとって大丈夫かどうか、そしてあなたがそれを保護するためにどこまで行きたいかを決定します。

「あいまいなデータ」を追加したり、独自のアルゴリズムを考え出そうとしたりすることは悪い考えです。特にこの分野の経験がない場合は、間違いを犯すことになります。標準のアルゴリズムを使用し、キーをどのように保護するかを考えてください(iOSキーチェーンなどを使用してください)。「RSAsigantures」または「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 に答える