Hash

Hash[expr]

expr についての整数のハッシュコードを与える.

Hash[expr,type]

expr についての指定された型の整数のハッシュダイジェストを与える.

Hash[expr,type,"format"]

ハッシュコードを指定された形式で与える.

詳細

  • Hash[expr,]は常に同じ式 expr に対しては同じ結果を与える.
  • 次は,使用可能なハッシュタイプである.
  • "Adler32"アドラー32ビット巡回冗長検査
    "BLAKE2b-512"512ビットBLAKE2bコード
    "BLAKE2s-256"256ビットBLAKE2sコード
    {"BLAKE2b",b}512ビットまでの任意長 b のBLAKE2bコード
    {"BLAKE2s",b}256ビットまでの任意長 b のBLAKE2sコード
    {"BLAKE2bp",b}BLAKE2bのマルチコア並列版
    {"BLAKE2sp",b}BLAKE2sのマルチコア並列版
    {"BLAKE2xb",b}256GiBまでの任意長 b のBLAKE2xbコード
    {"BLAKE2xs",b}128GiBまでの任意長 b のBLAKE2xsコード
    "CRC32"32ビット巡回冗長検査
    "Keccak224"224ビットKeccakコード
    "Keccak256"256ビットKeccakコード
    "Keccak384"384ビットKeccakコード
    "Keccak512"512ビットKeccakコード
    {"Keccak",b}224, 256, 384, 512ビットで長さ b のKeccakコード
    "MD2"128ビットMD2コード
    "MD4"128ビットMD4コード
    "MD5"128ビットMD5コード
    "RIPEMD160"160ビットRIPEMDコード
    "RIPEMD160SHA256"SHA-256に従うRIPEMD-160(ビットコインで使用されているような)
    "SHA1"160ビットSHA-1コード
    "SHA224"224ビットSHAコード
    "SHA256"256ビットSHAコード
    "SHA256SHA256"Double SHA-256コード(ビットコインで使用されているような)
    "SHA384"384ビットSHAコード
    "SHA512"512ビットSHAコード
    {"SHA",b}224, 256, 384, 512ビットで長さ b のSHAコード
    "SHA3-224"224ビットSHA3コード
    "SHA3-256"256ビットSHA3コード
    "SHA3-384"384ビットSHA3コード
    "SHA3-512"512ビットSHA3コード
    {"SHA3",b}224, 256, 384, 512ビットで長さ b のSHA3コード
    "Expression"式のハッシュコード(デフォルト)
  • 可変長ハッシュの場合,長さ b は8の倍数でなければならない.
  • "Expression"ハッシュは式の内部表現から計算されるので,コンピュータシステムやWolfram言語のバージョンによって変わることがある.
  • バイト列に作用する("SHA"のような)ハッシュについては,Hash[expr,]は,以下の表に従って,まず expr をバイトに変換する.
  • exprToString[FullForm[expr]]によるバイト
    "string"string のUTF-8表現によるバイト
    ByteArray[]バイト配列におけるリテラルなバイト
  • 次は使用可能な形式である.
  • "Integer"整数(デフォルト)
    "DecimalString"10進数列
    "HexString"16進数列
    "HexStringLittleEndian"リトルエンディアンバイト順の16進数列
    "Base36String"36を底とする英数字列
    "Base64Encoding"Base64の符号化
    "ByteArray"明示的なバイト配列としてのハッシュコード

例題

すべて開くすべて閉じる

  (4)

文字列のハッシュコードを与える:

データのデジタル個人情報:

16進法で与えられたSHA256ハッシュ:

SHAハッシュの出力長を指定する:

スコープ  (12)

一般的な式のハッシュコードを与える:

同様に:

異なるすべてのハッシュコードを比較する:

長さが異なる"BLAKE2b"ハッシュを計算する:

整数として与えられた512ビットSHAコード:

先頭の0を含んで10進数列として与えられた512ビットSHAコード:

ハッシュコードのさまざまな文字列表現を比較する:

ByteArrayとして与えられたDouble SHAコード:

このバイト配列には結果の256ビットが含まれている:

配列中の個々のバイトを見る:

RIPEMD160SHA256ハッシュは,基本的に,繰り返されるハッシュである:

ByteArrayあるいは文字列を使うときは,リテラルなバイトのハッシュコードが与えられる:

非アスキー文字については,ハッシュコードを与えるためにUTF-8表現が使われる:

0バイトの暗号学的ハッシュ値を計算する:

希望の長さのBLAKE2xsハッシュを計算する:

アプリケーション  (2)

データの完全性を証明するために「チェックサム」を提供する:

データの一部を変更する:

チェックサムが変わった:

連結暗号ハッシュ関数:

"abcdef"のハッシュコード:

特性と関係  (12)

ハッシュ値は常に同じ式に関しては等しい:

異なるハッシュコードは異なる入力から来る:

デフォルトのハッシュコードは"Expression"である:

"Expression"ハッシュはマシンワードに適合する:

先頭のビットは0である:

"Integer"はデフォルト形式である:

"DecimalString"は,必要な場合は0で充填された"Integer"の数列版である:

"HexString"は,必要な場合は0で充填された,16を底とした表現である:

"Base36String"は,必要な場合は0で充填された,36を底とした表現である:

"Base64Encoding"は底64の符号化を使って結果のバイトを符号化する:

"ByteArray"は256を底とした表現である:

底256から整数に変換する:

結果は同じである:

ByteArrayを中間結果として使うと繰り返されたハッシュが得られる:

FileHash[file,code]は,事実上,Hash[ReadByteArray[file],code]と同じである:

考えられる問題  (3)

整数のListHashは,リストの直列化されたバージョンを式として使う:

リテラルなバイトのハッシュコードを得るためにはByteArrayを使う:

ASCII文字列を使って7ビットバイト値のハッシュコードを与えることができる:

式のHashと式のFullFormを含む文字列とは違う:

Hashはシンボルの完全名をそのContextも含めて考慮するが,このためにハッシュ値が変わることがある:

おもしろい例題  (2)

ハッシュ値の衝突は非常に稀であるが,起こる可能性はある.次は2つのバイトリストである:

両者は同じではない:

両者は2ヶ所で異なっている:

2列のバイトのハッシュ値を計算する:

両者のハッシュ値は等しい:

異なる型のハッシュ値の分布:

Wolfram Research (1988), Hash, Wolfram言語関数, https://reference.wolfram.com/language/ref/Hash.html (2022年に更新).

テキスト

Wolfram Research (1988), Hash, Wolfram言語関数, https://reference.wolfram.com/language/ref/Hash.html (2022年に更新).

CMS

Wolfram Language. 1988. "Hash." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2022. https://reference.wolfram.com/language/ref/Hash.html.

APA

Wolfram Language. (1988). Hash. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Hash.html

BibTeX

@misc{reference.wolfram_2024_hash, author="Wolfram Research", title="{Hash}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/Hash.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_hash, organization={Wolfram Research}, title={Hash}, year={2022}, url={https://reference.wolfram.com/language/ref/Hash.html}, note=[Accessed: 22-November-2024 ]}