Movatterモバイル変換


[0]ホーム

URL:


hydroculのメモ >プログラミング言語の比較 >文字列 >バイナリのハッシュを計算するには (md5, sha1)

バイナリのハッシュを計算するには (md5, sha1)2014/06/17

いろいろな言語でMD5やSHA1などのメッセージダイジェストを計算する方法。

JavaScalaPHPPythonPerlsh

Java2015/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

Scala2014/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);// => 86deb27a32903da70a7b2348fcf36bc3val 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

PHP2014/06/17

md5sha1 という標準の関数で計算できる。

echo md5("あいうえお");// => 86deb27a32903da70a7b2348fcf36bc3echo sha1("あいうえお");// => 4ab0856318af20fa77d4492684fb8d9789e00cb6

md5 関数 | PHP Manual
http://php.net/manual/ja/function.md5.php

sha1 関数 | PHP Manual
http://php.net/manual/ja/function.sha1.php

Python2014/06/14

Python2での例

import hashlibprint hashlib.md5("あいうえお").hexdigest()# => 86deb27a32903da70a7b2348fcf36bc3print hashlib.sha1("あいうえお").hexdigest()# => 4ab0856318af20fa77d4492684fb8d9789e00cb6

Python3での例

import hashlibprint(hashlib.md5("あいうえお".encode('utf-8')).hexdigest())# => 86deb27a32903da70a7b2348fcf36bc3print(hashlib.sha1("あいうえお".encode('utf-8')).hexdigest())# => 4ab0856318af20fa77d4492684fb8d9789e00cb6

hashlib モジュール | Python 2.7 documentation
http://docs.python.jp/2/library/hashlib.html

Ruby / JRuby2016/03/10

require 'digest/md5'require 'digest/sha1'puts Digest::MD5.hexdigest('あいうえお');# => 86deb27a32903da70a7b2348fcf36bc3puts Digest::SHA1.hexdigest('あいうえお');# => 4ab0856318af20fa77d4492684fb8d9789e00cb6

Perl2015/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 "あいうえお" | md5sum86deb27a32903da70a7b2348fcf36bc3  -$ echo -n "あいうえお" | sha1sum4ab0856318af20fa77d4492684fb8d9789e00cb6  -

echo-nを付けているのは最後に改行を付けられるのを防ぐため。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク

[8]ページ先頭

©2009-2025 Movatter.jp