多くのbcrypt実装はパスワードを最初の72バイトだけ切り出して利用する実装になっている。算術アルゴリズムが18個の32ビットサブキー（72オクテット/バイトと同じ）に初期化することを要求しているからである。bcryptのオリジナル仕様 はユーザーランドのテキストベースのパスワードをこのアルゴルズムの数値とどのようにマッピングするべきかを強制するものはなかった。テキストで書かれた短いコメントで文字列のASCIIエンコードされた文字をシンプルに利用する可能性があると書かれているが、強制するものではない: 「最後に、key引数は秘密暗号鍵であり、ユーザーが選んだ56バイトまでのパスワードである可能性がある（文字列がASCII文字列の場合はゼロのバイトの終端も含む）」アルゴリズムは初期値として72バイトの入力を扱うが、上記に引用文が「56バイトまで」のパスワードに言及している点は注目に値する。ProvosもMazièresも制約を短くした理由については表明していないが、Bruce SchneierによるBlowfishのオリジナルの仕様を見て決定した可能性がある: 「鍵サイズの448ビット制限によりすべてのサブキーのすべてのビットは、鍵のすべてのビットに依存していることが保証される」パスワードを初期の数値の値に変換する方法は実装によって異なる可能性があるため、非ASCII文字を含んだパスワードの強度が低下する可能性がある。
アルゴリズムは、次のロジックを持つ鍵セットアップアルゴリズムの"Eksblowfish"に強く依存している:Function EksBlowfishSetup   Input:      cost:     Number (4..31)                      log₂(Iterations)。例えば 12 ==> 2¹² = 4,096回繰り返す      salt:     array of Bytes (16 bytes)           ランダムソルト      password: array of Bytes (1..72 bytes)        UTF-8エンコードされたパスワード   Output:       state:    opaque BlowFish state structure    state  InitialState()   state  ExpandKey(state, salt, password)   repeat (2ᶜᵒˢᵗ)      state  ExpandKey(state, 0, password)      state  ExpandKey(state, 0, salt)    return stateInitialStateはオリジナルのBlowfishアルゴリズムと同じように動作する。P配列とS-boxに の16進数の少数点数部分を設定したものである。
bcryptのアルゴリズムは"OrpheanBeholderScryDoubt" というアルゴリズムをBlowfishを用いて64回暗号化した文字列を作成する。bcryptでは通常のBlowfishの鍵セットアップ関数をコストが高価な（expensive key setup）EksBlowfishSetup関数に置き換えている:Function bcrypt   Input:      cost:     Number (4..31)                      log₂(Iterations)。例えば 12 ==> 2¹² = 4,096回繰り返す      salt:     array of Bytes (16 bytes)           ランダムソルト      password: array of Bytes (1..72 bytes)        UTF-8エンコードされたパスワード   Output:       hash:     array of Bytes (24 bytes)   //key setup algorithmを使って、Blowfishの状態を初期化    state  EksBlowfishSetup(cost, salt, password)      //"OrpheanBeholderScryDoubt"という文字列を64回繰り返し暗号化   ctext  "OrpheanBeholderScryDoubt"  //24バイト ==> 3つの64ビットブロック   repeat (64)      ctext  EncryptECB(state, ctext) //通常のBlowfishのECBモードを使って暗号化   //24-byteのctextが結果のパスワードのハッシュ   return Concatenate(cost, salt, ctext)
元サッカー選手で指導者であった父のクリスティアン・グルキュフがFCロリアンで監督をしていたことから、同チームのユースに所属。その後、父と共にスタッド・レンヌのユースへ移り、2003年に同チームでプロデビューした。2005年に開催されたU-19欧州選手権ではハットトリックを決める活躍などでチームの優勝に貢献、ヨーロッパのビッグクラブから注目を集める存在となった。2005-06シーズンは19歳ながら背番号10を背負うと、国内リーグでは7得点を決め、UEFAカップでもプレーをした。オフシーズンにはアーセナル、バレンシア、アヤックスなど多くのクラブが獲得合戦を繰り広げたが、2006年5月27日に移籍金450万ユーロ（約6億3000万円）でイタリアのACミランへ移籍した。2006-07シーズンのチャンピオンズリーググループリーグ第1節AEKアテネFC戦でチャンピオンズリーグ初得点を決めた。しかしながらアンドレア・ピルロやジェンナーロ・ガットゥーゾなどの実力者の前にレギュラーポジションを掴めず、2008年6月4日に出場機会を求めて母国のFCジロンダン・ボルドーへレンタル移籍した。2008-09シーズンには12得点10アシストでチームの10シーズンぶりのリーグ制覇に貢献し、リーグ・アン最優秀選手に選ばれた。その活躍が評価され、レアル・マドリードなどのクラブが興味を示したが、ボルドーが完全移籍オプションの移籍金1340万ユーロをミランに支払い、完全移籍した。2009年にはフランス年間最優秀選手賞に選出された。2010年8月23日にオリンピック・リヨンへ2200万ユーロ（約24億1000万円）で移籍した。背番号は29。由来は故郷フィニステール県の県番号にちなんだもの。移籍後は毎年深刻な負傷を繰り返し、あまり出場機会は得られなかった。2014年夏には減俸に同意した上で残留したが、翌年退団した。2015-16シーズンは古巣であるレンヌへ所属している。加入後はリヨン時代に負った負傷により試合から遠ざかっていたが、20節のロリアン戦で後半30分から途中出場し、実戦復帰している。2018年7月20日、ディジョンFCOにフリーで加入した。だが、翌年1月24日に契約解除となった。