バイナリのハッシュを計算するには (md5, sha1) 2014/06/17
いろいろな言語でMD5やSHA1などのメッセージダイジェストを計算する方法。
Java 2015/05/18
MD5を計算する例
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
byte[] hash = digest.digest("あいうえお".getBytes("UTF-8"));
StringBuilder hashStr = new StringBuilder();
for (int i = 0, l = hash.length; i < l; i++) {
int h = hash[i];
if (h < 0) {
hashStr.append(Integer.toHexString(h + 256));
} else {
if (h < 16) {
hashStr.append("0");
}
hashStr.append(Integer.toHexString(h));
}
}
System.out.println(hashStr.toString());
// => 86deb27a32903da70a7b2348fcf36bc3
SHA1を計算する例
MessageDigest digest = java.security.MessageDigest.getInstance("SHA1");
byte[] hash = digest.digest("あいうえお".getBytes("UTF-8"));
StringBuilder hashStr = new StringBuilder();
for (int i = 0, l = hash.length; i < l; i++) {
int h = hash[i];
if (h < 0) {
hashStr.append(Integer.toHexString(h + 256));
} else {
if (h < 16) {
hashStr.append("0");
}
hashStr.append(Integer.toHexString(h));
}
}
System.out.println(hashStr.toString());
// => 4ab0856318af20fa77d4492684fb8d9789e00cb6
java.security.MessageDigest
| Java Platform SE 8 Javadoc
http://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html
Scala 2014/06/17
Javaの java.securitiy.MessageDigest
で計算できる。
val digest = java.security.MessageDigest.getInstance("MD5");
val hash = digest.digest("あいうえお".getBytes("UTF-8"));
val hashStr = hash.map { b => "%02x".format(b); }.mkString;
println(hashStr);
// => 86deb27a32903da70a7b2348fcf36bc3
val digest = java.security.MessageDigest.getInstance("SHA1");
val hash = digest.digest("あいうえお".getBytes("UTF-8"));
val hashStr = hash.map { b => "%02x".format(b); }.mkString;
println(hashStr);
// => 4ab0856318af20fa77d4492684fb8d9789e00cb6
PHP 2014/06/17
md5
や sha1
という標準の関数で計算できる。
echo md5("あいうえお");
// => 86deb27a32903da70a7b2348fcf36bc3
echo sha1("あいうえお");
// => 4ab0856318af20fa77d4492684fb8d9789e00cb6
md5
関数 | PHP Manual
http://php.net/manual/ja/function.md5.php
sha1
関数 | PHP Manual
http://php.net/manual/ja/function.sha1.php
Python 2014/06/14
Python2での例
import hashlib
print hashlib.md5("あいうえお").hexdigest()
# => 86deb27a32903da70a7b2348fcf36bc3
print hashlib.sha1("あいうえお").hexdigest()
# => 4ab0856318af20fa77d4492684fb8d9789e00cb6
Python3での例
import hashlib
print(hashlib.md5("あいうえお".encode('utf-8')).hexdigest())
# => 86deb27a32903da70a7b2348fcf36bc3
print(hashlib.sha1("あいうえお".encode('utf-8')).hexdigest())
# => 4ab0856318af20fa77d4492684fb8d9789e00cb6
hashlib
モジュール | Python 2.7 documentation
http://docs.python.jp/2/library/hashlib.html
Ruby / JRuby 2016/03/10
require 'digest/md5'
require 'digest/sha1'
puts Digest::MD5.hexdigest('あいうえお');
# => 86deb27a32903da70a7b2348fcf36bc3
puts Digest::SHA1.hexdigest('あいうえお');
# => 4ab0856318af20fa77d4492684fb8d9789e00cb6
Perl 2015/03/23
Digest::MD5
モジュールの md5_hex
関数はバイナリからMD5を計算し、16進数表記にしたものを返す。同じモジュールの md5
関数はMD5を計算し、結果のバイナリをそのまま帰す。
以下はMD5を計算する例。
use utf8;
use Encode qw/encode/;
use Digest::MD5 qw/md5_hex/;
# md5関数は計算結果のバイナリそのまま返すので print しようとするとターミナルが文字化けする
# print md5(encode('utf-8', "あいうえお"));
print md5_hex(encode('utf-8', "あいうえお"));
# => 86deb27a32903da70a7b2348fcf36bc3
MD5はバイナリを元に計算するので、文字列はencode
関数でバイナリに変換する必要がある。
sha1であれば、Digest::SHA1
モジュールの sha1
または sha1_hex
関数を使う。
sh (シェルスクリプト) 2015/02/15
以下のように md5sum
コマンドでMD5を計算でき、
sha1sum
コマンドでSHA1を計算できる。
$ echo -n "あいうえお" | md5sum
86deb27a32903da70a7b2348fcf36bc3 -
$ echo -n "あいうえお" | sha1sum
4ab0856318af20fa77d4492684fb8d9789e00cb6 -
echo
に-n
を付けているのは最後に改行を付けられるのを防ぐため。