1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rust】クレートsha3によりSHAKE256のハッシュ関数を使用する

Posted at

はじめに

Rustでは、クレートsha3[参考(1)]を利用することによってSHA-3ハッシュ関数を使用することができます。

なのですが、筆者がSHAKE256の関数を利用したかった際に、あまり(読める)文献が見つからず苦労しました。
このページでは、動くようになったコードなどを備忘録として置いておきます。

※この記事は、2020/12/08に確認した事項をまとめております。最新の情報と異なる可能性がありますのでご了承ください。

動作環境

CentOS Linux release 7.9.2009
rustc (Stable) 1.49.0
cargo (Stable) 1.49.0
sha3 0.9.1

導入

sha3の導入には、Cargo.tomlの依存関係の欄に以下を追記すればOKです。

sha3 = "0.9.1"

0.9.1の部分は、利用したいsha3のバージョンを指定してください。

SHAKE256の使用例

sha3を用いてSHAKE256のハッシュ関数を使用する例を以下のコードに示します。

use sha3::Shake256;
use sha3::digest::*;

fn main() {
    // create a SHAKE256 object
    let mut hasher = Shake256::default();

    // write input message
    // updateの引数は[u8]
    hasher.update(b"hello world");

    // read hash digest
    let size: usize = 200;
    // 引数はusize
    // 返り値はBox<[u8]>
    let result = hasher.finalize_boxed(size);
    
    for i in 0..size {
        print!("{} ", result[i]);
        if i % 10 == 9 { 
            println!("");
        }
    }
    println!("");
}

この例では、"hello world"をSHAKE256によって200バイトのハッシュ値に変換し、その結果を標準出力しています。
ローカル定数sizeの値が、ハッシュ値のバイト数です。
なお、このハッシュ値はBox<[u8]>型で得られます。そのため、ハッシュ値の確認には、コードのようにループ文を用いるなどする必要があります。

参考

(1) sha3 - crates.io: Rust Package Registry

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?