0

私は TinyOS-2.1.2 を使用しており、セキュリティ技術を実現するために TinyECC-2.0 を使用しています。tinyecc で利用可能な SHA1 を使用したい。しかし、値のハッシュを取ると、

uint8_t data=123;

SHA1.nc で指定された sha の 3 つの関数、つまり SHA1.reset、SHA1.update、SHA1.digest を使用して結果を取得します。しかし、コードを実行するたびに。「make micaz sim」を実行すると、同じデータに対して異なるハッシュ結果が得られます。

取得した各データの一意のハッシュ値を取得する方法は?

コードは次のとおりです。

#include "sha1.h"

module DisseminationC {
  uses {
            interface SHA1;
}
implementation{

void hash(){

uint8_t x=123;

call SHA1.context(context);
call SHA1.update(context, x, sizeof(x));
call SHA1.digest(context, Message_Digest[SHA1HashSize]);

dbg("All", "%s Hash is : %d \n", sim_time_string(), Message_Digest);
}

以下に示すように、コードに変更を加えました。今、ハッシュ出力を取得しています。しかし、問題は、入力として与えられたすべての異なる数値に対して、同じ答えが得られることです。この問題を解決するにはどうすればよいですか?

私を助けてください..

#include "sha1.h"

module SecurityC{

    uses interface Boot;
    uses interface SHA1;
}

implementation{

    uint8_t Message_Digest[SHA1HashSize];
    SHA1Context context;
    uint8_t num=123;
    uint32_t length=3;
    uint8_t i;

    event void Boot.booted()
    {
        dbg("Boot", "Application booted.\n");

        call SHA1.reset(&context);
        while(length>0)
        {
            length=length/10;
            call SHA1.update(&context, &num, length);
        }
            call SHA1.digest(&context, Message_Digest);
            for(i = 0; i < SHA1HashSize; i++) {
                dbg("Boot", "%s KEY IS: %x \n", sim_time_string(), Message_Digest[i]);
        }
    }
}
4

1 に答える 1

0

まず第一に、あなたのコードは悪いです。中かっこが 2 つなく、関数SHA1.contextはこのライブラリには存在しません (あるべきだSHA1.resetと思います)。また、宣言されていませんMessage_Digestcontext実際に使用している完全なコードを提供してください。

ただし、少なくとも 2 つの深刻なバグがあるようです。

最初にxtoの値を渡しSHA1.updateますが、メッセージへのポインターを渡す必要があります。したがって、関数123はメモリ内のアドレスにあるメッセージを処理します (これについてコンパイラの警告が表示されます)。の値からハッシュを計算したい場合はx、これを試してください:

call SHA1.update(context, &x, sizeof(x));

次に、size の配列のMessage_Digestようです。最後のステートメントでは、この配列の内容ではなく、この配列へのポインターを出力します (また、コンパイラーは警告を発するはずです)。そのため、メモリー内のこの配列のアドレスを取得します。配列をループで処理したい場合があります。uint8_tSHA1HashSize

uint8_t i;
for(i = 0; i < SHA1HashSize; ++i) {
    // process Message_Digest[i], for instance print it
}
于 2014-08-04T18:19:48.963 に答える