package Ġsal ted hash Ċ Ċ import Ġjava . security . Message Digest Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . random . Random Ċ Ċ class ĠSal ted Hash Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmd Ġ= ĠMessage Digest . getInstance (" SHA - 2 5 6 ") ĊĠĠĠ Ġprivate Ġval Ġsal ts Ġ= Ġmutable ListOf < Int >() ĊĠĠĠ Ġprivate Ġval Ġnum Hash : ĠInt ĊĊĠĠĠ Ġ// ĠInput Ġnumber Ġof Ġhash Ġfunctions ĊĠĠĠ Ġconstructor ( num Hash : ĠInt , Ġseed : ĠInt Ġ= Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . num Hash Ġ= Ġnum Hash ĊĠĠĠĠĠĠĠ Ġval Ġrd Ġ= ĠRandom ( seed ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum Hash ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġsal ts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsalt Ġ= Ġrd . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsal ts . add ( salt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInput Ġmessage , Ġoutput Ġint Ġhash Ġvalue ĊĠĠĠ Ġ// ĠFeed Ġwith Ġsal ts [ i ] Ġfirst Ġand Ġthen Ġhash ĊĠĠĠ Ġfun Ġget Hash ( index : ĠInt , Ġmessage : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġcorresponding Ġsalt Ġthen Ġhash ĊĠĠĠĠĠĠĠ Ġmd . update ( sal ts [ index ]. to Byte ()) ĊĠĠĠĠĠĠĠ Ġval Ġdigest Ġ= Ġmd . digest ( message . toByteArray ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConvert Ġdigest [ 0 - 7 ] Ġto Ġa Ġpositive Ġinteger ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġshift Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġor Ġ( digest [ i ]. toInt () Ġshl Ġshift ). absolute Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshift Ġ+= Ġ 8 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . absolute Value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturned Ġby Ġthe Ġhashes [ index ] ĊĠĠĠ Ġ// ĠWith Ġadditional Ġmax Range Ġparameter Ġto Ġget Ġan Ġindex ĊĠĠĠ Ġfun Ġget Index ( index : ĠInt , Ġmessage : ĠString , Ġmax Range : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( max Range Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Hash ( index , Ġmessage ). rem ( max Range ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Max Ġrange Ġcannot Ġbe Ġnegative ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnum Hash (): Int Ġ{ return Ġnum Hash } ĊĊĠĠĠ Ġfun Ġmerge able With ( sal ted Hash : ĠSal ted Hash ): ĠBoolean { ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġsal ts ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsal ts . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sal ts [ i ] Ġ!= Ġsal ted Hash . sal ts [ i ]) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }