ソルトとパスワードを使用して暗号化を実装しようとしています。また、Saltの推奨サイズは64ビットなので、宣言しました。
char Salt[8];
RAND_pseudo_bytesを使用して、次のようにランダムなソルトを取得しました。
RAND_pseudo_bytes((unsigned char*)Salt, sizeof Salt);
また、sizeofのstrlen instreadを誤って使用したため、コンパイルするたびにhexdump出力の長さが異なるため(場合によっては5、ほとんどが24バイト)、次のようになります。
RAND_pseudo_bytes((unsigned char*)Salt, strlen(Salt));
私は何が起こっているのかを理解するために次の行を試しました:
printf("\n%d\n",strlen(Salt));
毎回24を出力します。
だから、私の質問は、Saltの長さ8(sizeof(Salt)= 8)を宣言したときにstrlen(Salt)= 24なのはなぜですか?私は9を理解します(「\ 0」を使用しますが、それがどのように正確に発生するかは完全にはわかりません)が、24は奇妙なことに私を襲います。ありがとうございました。
strlen
指定したポインタを下に移動し、ヌルバイトに達するまでバイト数をカウントします。この場合、8バイトのchar配列にはnullバイトがないためstrlen
、境界を越えてスタック上で定義されたchar配列を超えたメモリ領域に移動し続け、そこで発生したことが何であれ、の動作が決まりstrlen
ます。この場合、配列の先頭を24バイト過ぎたところで、ヌルバイトがありました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加