Monday, July 10, 2017

boost sha1 の出力と python の hashlib の出力を比較しながら使いたい場合

先日, sha1 ダイジェストを C++ (boost) と python の両方で使いたいということがありました。通常 1 つの言語だけで実装する場合には配列の中身さえ同じならばいいのですが,私の利用方法では 2 つの実装のからの出力が一致する必要がありました。このコードはその問題を避けていますので,もし,こういう利用方法をされる場合には参考になるかと思います。(単純にフォーマットをそろえているだけです。)

#include <boost/uuid/sha1.hpp>

/// get sha1 digest as a std::string
///
/// \param[in] mes message to be hashed
/// \return    digest string
std::string get_sha1_digest(const std::string& mes)
{
    boost::uuids::detail::sha1 sha1;
    sha1.process_bytes(mes.c_str(), mes.size());

    const int DIGEST_SIZE = 5;
    unsigned int sha1_hash[DIGEST_SIZE];
    sha1.get_digest(sha1_hash);

    std::stringstream sstr;
    for (std::size_t i=0; i < DIGEST_SIZE; ++i)
    {
        sstr << std::setfill('0') << std::setw(8) << std::hex << sha1_hash[i];
    }

    return sstr.str();
} 
 
 
上記の関数の出力は,次の python code の出力に一致します。
 
import hashlib

def get_sha1_digest(mes):

    sha1_obj = hashlib.sha1(mes.encode())
    return sha1_obj.hexdigest()

1 comment:

  1. 山内 斉 様

    突然のメッセージ大変失礼いたします。
    日本でテレビ番組の制作協力を行っている
    株式会社フルタイムの櫛引孝志というものです
    (http://fulltime.co.jp/)。
    弊社が制作協力を行っている番組にて、
    海外で暮らしている日本人の方にご出演いただくというものがあり、
    ご相談をさせていただきたくメッセージをお送りさせていただきました。

    ご返信いただけますと幸いでございます。
    ご多忙のところ恐縮ですが何卒よろしくお願いいたします。

    ※既に別のスタッフ、番組からご連絡が入っているかもしれません…
     ご迷惑であればスルーしていただいて構いませんので。
     (度重なるご連絡になっておりましたら、申し訳ございません)

    ▽▽▲▽▲▲▽▽▲▽▲▲▽▽▲▽▲▲
    株式会社フルタイム 櫛引孝志 Takashi Kushibiki
    〒106-0032
    東京都港区六本木6-7-14
    朝日神社会館3FーA
    TEL:03-3404-2151
    FAX:03-3404-2155
    mail:kushibiki@fulltime.co.jp

    ReplyDelete