鍑犲勾鍓嶏紝鐩镐俊寰堝寮€鍙戣€呴兘鍜屾垜涓€鏍蜂娇鐢∕D5鍑芥暟瀵圭敤鎴峰瘑鐮佺瓑鏁忔劅鍐呭杩涜鍝堝笇澶勭悊锛屽瓨鍌ㄥ埌鏁版嵁搴撲腑銆傚嵆浣挎槸鐜板湪锛岃澶氬紑鍙戜汉鍛樹粛鐒惰繖鏍峰仛銆備絾寰堝浜嬪疄鍛婅瘔鎴戜滑锛孧D5鍑芥暟浜х敓鐨勫€煎湪鍩轰簬褰╄櫣琛煂堢殑鏆村姏鐮磋В浠ュ強姣忕涓婁嚎娆$殑寮哄ぇGPU涓嬫槸鍙互杞绘澗鐮磋В鐨勩€傚洜姝わ紝鍦ㄩ渶瑕佸瓨鍌ㄧ敤鎴峰瘑鐮佺瓑鏁忔劅淇℃伅鐨勫満鏅笅锛屾垜浠渶瑕佸鎵惧彟涓€绉嶅彲闈犮€佸畨鍏ㄧ殑鍔犲瘑鏂瑰紡銆侻D5涓嶅啀鍙潬鐨勫師鍥犲彲浠ュ弬鑰冩垜鐨勫彟涓€绡囨枃绔犮€婂崄涓囦釜涓轰粈涔堬細鍒敤 MD5 鍔犲瘑瀵嗙爜銆嬨€傜洰鍓嶆帹鑽愮殑瑙e喅鏂规鏄娇鐢╞crypt鍑芥暟鐢熸垚瀵嗙爜锛屽苟涓嶆槸鍥犱负瀹冪粷瀵瑰畨鍏ㄤ笉鍙牬瑙o紝鑰屾槸鍥犱负鐮磋В鐨勬垚鏈冻澶熼珮銆備笘鐣屼笂娌℃湁缁濆鐨勫畨鍏紝鎴戜滑鑳藉仛鐨勫氨鏄鍔犵牬瑙f垚鏈€備袱涓叧閿洜绱犻鍏堬紝bcrypt鏄瘑鐮佸鍔犲瘑鍑芥暟锛岀敱NielsProvos鍜孌avidMazieres璁捐锛屽苟浜?999骞存寮忓悜涓栫晫鎻愬嚭銆傝繖涓嚱鏁版湁涓や釜鍏抽敭鍥犵礌鏉ヤ繚璇佸叾鍙潬鎬у拰瀹夊叏鎬э細绗竴鐐癸細涓庤澶氬叾浠栧姞瀵嗗嚱鏁颁竴鏍锋垨鑰呮柟妗堬紝浼氭幒鍏ヤ竴绉嶇洂锛屼篃灏辨槸鎴戜滑甯歌鐨勨€滃姞鐩愨€濄€傛湁浜嗙洂馃锛屾敾鍑昏€呮棤娉曢€氳繃褰╄櫣琛ㄧ牬瑙o紝蹇呴』鐚滄祴鐩愬€兼墠鑳界牬瑙c€備絾鏄粎浠呭姞鐩愶紝寰堝鍔犲瘑鍑芥暟鎴栬€呮垜浠彲浠ョ敤鍔犵洂鐨凪D5锛屽苟涓嶆槸浣跨敤瀹冪殑鍏呭垎鐞嗙敱銆傜浜岀偣锛歜crypt閫氳繃鎺ュ彈涓€涓弬鏁癱ost鏉ュ鍔犺绠楁椂闂淬€傛崲鍙ヨ瘽璇达紝鎴愭湰鍊艰秺澶э紝bcrypt杩愯璁$畻鎵€闇€鐨勬椂闂村氨瓒婇暱銆傛兂璞′竴涓満鏅細鎴戜滑閫氳繃MD5+salt鏂规鐢熸垚瀵嗙爜銆傛敾鍑昏€呮嬁鍒板瘑鐮佸悗锛屽熀浜庡僵铏硅〃鐨勬敾鍑绘棤鏁堬紝鐩存帴浣跨敤鏆村姏鎼滅储鏀诲嚮锛屽洜涓烘墽琛屼竴涓狹D5鍑芥暟鎵€闇€鐨勬椂闂磋秴杩囦簡寮哄ぇ鐨勮绠楄兘鍔涖€傚墠闈㈠緢鐭紝鎵€浠ョ牬瑙e畠骞朵笉闇€瑕佸お澶氭椂闂淬€傛垜浠亣璁炬墽琛孧D5鍑芥暟鎵€闇€鐨勬椂闂翠负1姣銆傜幇鍦ㄦ垜浠娇鐢╞crypt鍑芥暟鏉ョ敓鎴愬瘑鐮併€傛垜浠湪鐢熸垚鐨勬椂鍊欙紝棣栧厛鎸囧畾cost鍙傛暟鍊间负1锛屾鏃舵墽琛宐crypt鍑芥暟鎵€闇€瑕佺殑鏃堕棿涔熸槸1姣锛屼絾鏄鏋滄垜浠鍔燾ost鍙傛暟鍊硷紝姣斿10锛屾墽琛屾墍闇€瑕佺殑鏃堕棿bcrypt鍑芥暟涓€娆″彲鑳芥槸50姣锛岃繖鎰忓懗鐫€鐮磋В瀵嗙爜鍙渶瑕?涓皬鏃讹紝鐜板湪鐮磋В涓€涓瘑鐮侀渶瑕?0涓皬鏃躲€傛敾鍑昏€呭線寰€涓€娆$牬瑙d竴鎵圭敤鎴风殑瀵嗙爜锛屽叾鏃堕棿鎴愭湰鍜岀畻鍔涙垚鏈彲鎯宠€岀煡銆傚浣曢€夋嫨涓€涓悎閫傜殑cost閫氬父鎴戜滑榛樿灏?0浣滀负cost鍙傛暟鐨勫€硷紝姣斿Go涓殑bcrypt.DefaultCost灏辨槸10锛屾垜浠篃鍙互鏍规嵁褰撳墠鏈嶅姟鍣ㄧ殑鎬ц兘閫夋嫨涓€涓悎閫傜殑cost鍊笺€傛瘮濡傛垜鎯冲湪200姣鍐呮墽琛屼竴娆crypt锛岃繖鏍峰氨涓嶄細杞绘槗琚牬瑙f垨鑰呰姳澶鏃堕棿銆傜劧鍚庢垜浠彲浠ヤ娇鐢ㄤ笅闈㈣繖娈礕o浠g爜鏉ラ€夋嫨涓€涓悎閫傜殑鎴愭湰鍊硷細packagemainimport("fmt""time""golang.org/x/crypto/bcrypt")funcmain(){forcost:=10;鎴愭湰<=20锛沜ost++{start:=time.Now()bcrypt.GenerateFromPassword([]byte("pa55w0rd"),cost)fmt.Printf("cost:%d,duration:%v\n",cost,time.Since(寮€濮?)}}鍦ㄦ垜鏈湴鏈哄櫒涓婄殑鎵ц缁撴灉濡備笅锛歝ost:10,duration:75.797197mscost:11,duration:146.597944mscost:12,duration:298.971358mscost:13,duration:610.758023mscost:14,duration:1.18161515锛屾寔缁椂闂达細2.433344989Scost锛?6锛屾寔缁椂闂达細4.917117451Scost锛?7锛屾寔缁椂闂达細9.453614867scost锛?8锛屾寔缁椂闂达細19.186913882scost锛?9鏄?1銆傚叾瀹炰粠涓婇潰鐨勮繍琛岀粨鏋滄垜浠篃鍙互鐪嬪嚭cost鍊煎拰杩愯鏃堕棿鐨勫叧绯伙細cost姣忓鍔?锛岃繍琛屾椂闂村氨浼氱炕鍊嶃€傚鍏蜂綋绠楁硶鎰熷叴瓒g殑鍙互鍦ㄦ枃鏈殑缁村熀鐧剧鍙傝€冮摼鎺ヤ腑鎵惧埌鏇村淇℃伅銆傚悓鏃堕檮涓婁互涓婸HP鐗堟湰锛??phpfor($cost=10;$cost<=15;$cost++){$start=microtime(true);password_hash("test",PASSWORD_BCRYPT,["cost"=>$cost]);$end=寰椂闂达紙鐪燂級锛涘洖澹扳€滄垚鏈細鈥濄€?鎴愭湰銆傗€滐紝鏈熼棿锛氣€濄€?$end-$start)*1000銆?\n";}?>姝ゅ鎻愪緵绀轰緥浠g爜PHP鍜孏o鐨勪袱涓ず渚嬩唬鐮佷緵鍙傝€冿細10]);echo"EncryptedPassword:".$鏁e垪銆?\n";$match=password_verify($pwd,$hash);echo"鍖归厤缁撴灉锛?.$match;?>packagemainimport("fmt""golang.org/x/crypto/bcrypt")funcmain(){pwd:="pa55w0rd"fmt.Println("鍘熷瀵嗙爜:"+pwd)hash,_:=bcrypt.GenerateFromPassword([]byte(pwd),bcrypt.DefaultCost)fmt.Println("鍔犲瘑瀵嗙爜:"+string(hash))err:=bcrypt.CompareHashAndPassword(hash,[]byte(pwd))fmt.Println("MatchResult:",err==nil)}鍙傝€冮摼鎺ttps://en.wikipedia.org/wiki/Bcrypt
