はじめに
先日、Flutterで開発していた時に、文字列のハッシュ値を使わなければいけないことになりました。
なので、今回はFlutterでどうやったらSHA-256やMD5が使えるかどうか調べてみました。
環境
- Flutter 2.2.3
- crypto 3.0.1
実装方法
プラグインの最新バージョンを確認
下記のサイトにアクセスし、バージョンを確認します。
crypto | Dart package
Implementations of SHA, MD5, and HMAC cryptographic functions.
記事作成の時点では3.0.1が最新バージョンでした。
プラグインのインストール
pubspec.yamlのdependenciesに「crypto: ^3.0.1」を追記します。
または常に最新版を使う設定の「crypto: any」を追記します。
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
crypto: ^3.0.1
その後、プロジェクト配下で「flutter pub get」コマンドを実行
よくわからない場合はAndroid Studioでpubspec.yamlファイルを開くと右上に「Pub get」ボタンがあるのでそれを押して下さい。
サンプルコードと動作確認
「abc」という文字列をSHA-256とMD5を使ってハッシュ化させようと思います。
import 'dart:convert';
import 'package:crypto/crypto.dart';
void test() {
// SHA-256の場合.
var bytes1 = utf8.encode('abc');
var digest1 = sha256.convert(bytes1);
print('SHA-256 : ${digest1.toString()}');
// SHA-256 : ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
// MD5の場合.
var bytes2 = utf8.encode('abc');
var digest2 = md5.convert(bytes2);
print('MD5 : ${digest2.toString()}');
// MD5 : 900150983cd24fb0d6963f7d28e17f72
}
ハッシュ値が合っているか、それぞれターミナルで確認してみます。
// SHA-256の場合.
% echo -n "abc" | shasum -a 256
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad -
// MD5の場合.
% echo -n "abc" | md5
900150983cd24fb0d6963f7d28e17f72
SHA-256とMD5がFlutter上の値とターミナルの値で同じになりました。
このプラグインの暗号化の対応状況
またこのプラグインは以下の暗号化に対応しているそうです。
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
- SHA-512/224
- SHA-512/256
- MD5
- HMAC (i.e. HMAC-MD5, HMAC-SHA1, HMAC-SHA256)
さいごに
頻繁につかわない技術は忘れがちなのは自分だけですか?
コメント