はじめに
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]>
型で得られます。そのため、ハッシュ値の確認には、コードのようにループ文を用いるなどする必要があります。