std::stringをsha-1してbase64に変換する


(追記:内容を修正しました)

C++で任意の文字列をsha1してからbase64に変換する方法です。

WebSocketのハンドシェイクで必要なので調べてみました。

サーバー側から見たWebSocketのハイドシェイク処理はHTTPリクエストヘッダのSec-WebSocket-Keyに設定されてきた文字列に「258EAFA5-E914-47DA-95CA-C5AB0DC85B11」という規定の文字列を連結してから、sha-1を通して出来たバイナリをbase64にしてクライアントに返すという処理になります。

この「sha-1してからbase64にする」ところまでを書いてみました。

使ったライブラリはboostのDataflow Iteratorsと、crypto++です。

Serialization – Dataflow Iterators

Crypto++ Library 5.6.1 – a Free C++ Class Library of Cryptographic Schemes

ポイントとしてはbase64のパディングの部分で、dataflowではどうやらやってくれないようなので自前で「=」を追加しています。

Leave a Comment