рдкрд╛рд╕рд╡рд░реНрдб рдзреАрдорд╛ рд╣реИрд╢рд┐рдВрдЧред рдХреНрдпреЛрдВ?

рд╢реБрдн рджрд┐рди, рд╣рдмреНрдмрд░рдкрд╛рд░рдирд┐рдХ! рдЖрдЬ рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢рд┐рдВрдЧ рдХреЛ рдзреАрдорд╛ рдХрд░рдирд╛ ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╣рд░ рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдзреАрдорд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

рдХрдо рд╕реЗ рдХрдо рддрдм, рдХрд┐ рд╕рдмрд╕реЗ рд╕реБрдкрд░-рдбреБрдкрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рднреА, рд╕рдмрд╕реЗ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЙрд╕рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдбред



рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░рд╛рд░ рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЛ рдХреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд┐рддрдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рдЧреБрдЬрд░рд╛? 50-100-200? рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрдЪреНрдЫреЗ GPU рдкрд░, рдХреБрдЦреНрдпрд╛рдд cRARk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЦреЛрдЬ рдХреА рдЧрддрд┐ рдХреЗрд╡рд▓ рд▓рдЧрднрдЧ 2400 рд╡рд┐рдХрд▓реНрдк / рд╕реЗрдХрдВрдб рд╣реЛрддреА рд╣реИред рдФрд░ рдпрд╣ zip / md5 / SHA1 рдХреЗ рд▓рд┐рдП рд▓рд╛рдЦреЛрдВ рдкрд╛рд╕рд╡рд░реНрдб / рд╕реЗрдХреЗрдВрдб рдХреЗ рджрд╕рд┐рдпреЛрдВ (рд╕реИрдХрдбрд╝реЛрдВ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣реИред



рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдореЗрд░реА рдореБрдХреНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ред





рд╕рдВрдкреВрд░реНрдг рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрд░реНрде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рд╣рд╛рдВ, рдореИрдВ рд▓рдЧрднрдЧ рд╕рднреА рдХреА рдкрд╕рдВрджреАрджрд╛ рдЗрдВрджреНрд░рдзрдиреБрд╖ рдЯреЗрдмрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛, рдЬреЛ рдЪреАрдиреА рдФрд░ рдирдордХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдлреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдЙрдирдХреА рдкреАрдврд╝реА рднреА рдмрди рдЬрд╛рдПрдЧреА, рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рддреЛ рдмрд╣реБрдд рд╢реНрд░рдо-рд╕рд╛рдзреНрдпред



рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдирдордХ рд╕рд┐рд╕реНрдЯрдо рдЦрд░рд╛рдм рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрд╕ рдордЬрдмреВрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдФрд░ рдЗрд╕рд▓рд┐рдП, рдирдордХ рд╣реИ, рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИред рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?



рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

  1. рдирдордХ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдорд┐рд▓рд╛рдПрдВ
  2. рд╣реИрд╢, рдкрд░рд┐рдгрд╛рдо рдпрд╛рдж рд╣реИ
  3. рдЬрдмрдХрд┐ (рдХрдИ рдмрд╛рд░) {
  4. рдЧреЛрд▓ рдирдордХ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
  5. рдЗрд╕реЗ рдФрд░ рд╣реИрд╢ рдореЗрдВ рд╕рдореЗрдЯреЛ
  6. рдХреИрд╢, рдкрд░рд┐рдгрд╛рдо рдпрд╛рдж рд░рдЦреЗрдВ}


Winrar рдореЗрдВ (рдЙрд╕рдХреЗ рд▓рд┐рдП, рд╡реИрд╕реЗ, рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд▓рд┐рдП), рдЕрдЧрд░ рдореЗрд░реА рд╕реНрдореГрддрд┐ рдореЗрд░реА рд╕реЗрд╡рд╛ рдХрд░рддреА рд╣реИ, рддреЛ рдЧреЛрд▓ рдирдордХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдЧрдпрд╛ред



рддреЛ, рдХреЛрдбред BouncyCastle рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдм рдХреБрдЫ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рд╣рдмрд░рдкреЗрд░рд╛рдиреЛрдЗрдХ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдФрд░ рд╢рд╛рдпрдж рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЬреЛрдбрд╝реЗрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, C # рдХреЗ рд▓рд┐рдП рдПрдХ BouncyCastle рд╣реИред



1. рдореИрдВ 2 рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо (SHA-256 рдФрд░ SHA-512) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IDigest

{

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмрд╛рдЗрдЯ [] рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( рдмрд╛рдЗрдЯ [] рдбреЗрдЯрд╛);



рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int getSize ();

}







2. SHA-256 рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг ( BouncyCastle рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ SHA256Digest рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ SHA256 IDigest рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ

{



рдирд┐рдЬреА SHA256Digest m_SHA256 = рдирдпрд╛ SHA256Digest ();



@Override

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмрд╛рдЗрдЯ [] рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( рдмрд╛рдЗрдЯ [] рдбреЗрдЯрд╛)

{

m_SHA256.reset ();

m_SHA256.update (рдбреЗрдЯрд╛, 0, data.length);

рдмрд╛рдЗрдЯ [] рдкрд░рд┐рдгрд╛рдо = рдирдпрд╛ рдмрд╛рдЗрдЯ [m_SHA256.getDigestSize ()];

m_SHA256.doFinal (рдкрд░рд┐рдгрд╛рдо, 0);

рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;

}



@Override

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int getSize ()

{

рд╡рд╛рдкрд╕реА m_SHA256.getDigestSize ();

}

}







3. рд╕рдмрд╕реЗ рдпрдореНрдореАред рдореИрдВ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ SlowHasher

{

рдирд┐рдЬреА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рд░ int BITS_IN_BYTE = 8;



рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int [] s_primeIndices = рдирдпрд╛ int [] {7, 11, 17, 23, 31, 41, 47, 53, 61};



/ **

* рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рд░ рджреМрд░ рдореЗрдВ рдирдордХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП 0x50000 рдмрд╛рд░ рд╣реИрд╢ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИ

*

* рдкрд░рдо рдкрдЪ

* рдкрд░рдо рдкрд╛рд╕рд╡рд░реНрдб

* рд╡рд╛рдкрд╕реА

* /

рдкрдмреНрд▓рд┐рдХ рдмрд╛рдЗрдЯ [] рдХреИрд▓рдХреНрд▓реЛрд╕реНрд╣рд╛рд╢ (IDigest рдбрд╛рдЗрдЬреЗрд╕реНрдЯ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕рд╡рд░реНрдб, рдмрд╛рдЗрдЯ [] рд╕реЙрд▓реНрдЯ)

{

int roundSaltSize = digest.getSize () / BITS_IN_BYTE;

рдмрд╛рдЗрдЯ [] bPasswd = password.getBytes ();

рдмрд╛рдЗрдЯ [] рддреЛрд╢ = рдирдИ рдмрд╛рдЗрдЯ [bPasswd.length + salt.length];



/ *

* рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╡реНрдпреВрд╣ рд░рдЪрдирд╛ рдЬреЛ рд╣реИрд╢реЗрдб рд╣реЛрдЧреА

* /

System.arraycopy (рдирдордХ, 0, toHash, 0, salt.length);

System.arraycopy (bPasswd, 0, toHash, salt.length, bPasswd.bength);



рдмрд╛рдЗрдЯ [] рд░реЗрд╕ = рдбрд╛рдЗрдЬреЗрд╕реНрдЯредрдкреНрд░реЛрд╕реЗрд╕ (рддреЛрд╢);

рдмрд╛рдЗрдЯ [] рдЕрд╕реНрдерд╛рдпреА = рдирдИ рдмрд╛рдЗрдЯ [res.length + roundSaltSize];



for ( int i = 0; рдореИрдВ <0x50000; i ++)

{

System.arraycopy (res, 0, temp, 0, res.length);



/ ***

* рдирдордХ рдХреА рдЧрдгрдирд╛

* /

( int j = 0; j <рд░рд╛рдЙрдВрдбрд╕рд╛рд▓реНрдЯрд╛рдЗрдЬрд╝; j ++)

{

int btmp = res [s_primeIndices [j]] & 0xFF;

( int k = 1; k <bITS_IN_BYTE; k ++) рдХреЗ рд▓рд┐рдП

{

btmp = ror ((btmp + (Res [ror (btmp, k)% res.length] & 0xFF))% 256, BITS_IN_BYTE-k);

}

рдЕрд╕реНрдерд╛рдпреА [Res.length + j] = ( рдмрд╛рдЗрдЯ ) btmp;

}

res = digest.process (рдЕрд╕реНрдерд╛рдпреА);

}

рд╡рд╛рдкрд╕реА Res;

}



/ **

* рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЛ рд╕рд╣реА рдорд╛рдирддреЗ рд╣реБрдП рд░реЛрдЯреЗрдЯ рдХрд░реЗрдВ

* рдкрд░рдо рдореВрд▓реНрдп 0 <= рдорд╛рди <= 255

* рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛

* рд╡рд╛рдкрд╕реА

* /

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ int рд░реЛрд░ ( int value , int n)

{

рд╡рд╛рдкрд╕реА (( рдореВрд▓реНрдп >> (n% BITS_IN_BYTE))) | (( рдорд╛рди << (8 - (n% BITS_IN_BYTE))) & 0xFF);

}

}



рдЬреЛ рд▓реЛрдЧ рдЬрд╛рд╡рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рддреБрд░рдВрдд рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреЛ рдХрдИ рдЖрд╡реЗрд╖рдг рд╕реЗ рдбрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП & 0xFF



ред рдпрд╣ рдХреЗрд╡рд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдмрд╛рдЗрдЯ рдХрд╛ рдПрдХ рд░реВрдкрд╛рдВрддрд░рдг рд╣реИ рдЬреЛ рдЗрд╕реЗ int рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдмрд┐рдЯрдорд╛рд╕реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИред рдФрд░ рд╕рднреА рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЛрдИ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ! рдмрд┐рд▓реНрдХреБрд▓! рдЦреИрд░, рдареАрдХ рд╣реИ, рдпрд╣ рдШрд╛рддрдХ рдирд╣реАрдВ рд╣реИред



рдпрд╣рд╛рдВ рд╕рднреА рд╕реБрдВрджрд░рддрд╛ рдЧреЛрд▓ рдирдордХ рдХрд╛ рдЧрдарди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЦреНрдп рдзреНрдпрд╛рди рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛:

  • Res SHA-256 рдХреЗ рд▓рд┐рдП 32 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ SHA-512 рдХреЗ рд▓рд┐рдП 64 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдпрд╣ рд╣реИрд╢ рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ
  • roundSaltSize - рдЧреЛрд▓ рдирдордХ рдХрд╛ рдЖрдХрд╛рд░ред SHA-256 рдХреЗ рд▓рд┐рдП 4 рдмрд╛рдЗрдЯ рдФрд░ SHA-512 рдХреЗ рд▓рд┐рдП 8 рдмрд╛рдЗрдЯреНрд╕
  • рдЕрд╕реНрдерд╛рдпреА - рдЖрд░рдИ рд╕рд░рдгреА рдЖрдХрд╛рд░ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рде рджреМрд░ рдирдордХ рдЖрдХрд╛рд░ рдЧреЛрд▓ рдЖрдХрд╛рд░
  • s_primeIndices - Res рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдЧреЛрд▓ рдирдордХ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рдЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗред рдпрд╣реА рд╣реИ, рд╣рдо рд░реЗрд╕ [7] рдХреЗ рд╕рд╛рде рдПрд╕рдПрдЪрдП -256 рдХреЗ рд▓рд┐рдП рдЧреЛрд▓ рдирдордХ рдХреА рдкрд╣рд▓реА рдмрд╛рдЗрдЯ рдХреА рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рджреВрд╕рд░рд╛ рд░реЗрд╕ [11], рдХреЗ рд╕рд╛рдеред SHA-512 рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реВрдЪрдХрд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ
  • btemp - рдПрдХ рдмрд╛рдЗрдЯ рдХрд┐ рдореБрд╢реНрдХрд┐рд▓ рдмрд╛рддрдЪреАрдд рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рдж рдЧреЛрд▓ рдирдордХ рдореЗрдВ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧреА


рдЧреЛрд▓ рдирдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЧрдарди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдФрд░ рдЯрд┐рдкреНрдкрдгреАред рд╕рдВрдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд┐рд╕реА рднреА рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЕрдиреБрд╕рдВрдзрд╛рди рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдореВрд▓реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реИрд╢ рдХреЗ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдзреАрдорд╛ рдФрд░ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЦреИрд░, рдЕрдм рд╡рд┐рд╡рд░рдг:



  1. рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореБрдЦреНрдп рдирдордХ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╣рд╛рд╢ рд╕рд░рдгреА рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  2. рд╣реИрд╢ рд╕рд░рдгреА рд╣реИрд╢реЗрдб рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд░рд┐рдЬрд╝ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдореВрд▓ рдирдордХ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рднреВрд▓ рдЧрдпрд╛
  3. рд╣рдо 0x50000 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
  4. рдЕрдЧрд▓рд╛, рд╣рдо рдЕрд╕реНрдерд╛рдпреА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд░реЗрд╕ рд╕рд░рдгреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрд╕реНрдерд╛рдпреА рд╕рд░рдгреА рдХреЗ рдЕрдВрдд рдореЗрдВ, рдирдордХ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА 4 рдпрд╛ 8 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВред рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рднрд░рдирд╛ рд╣реИ
  5. рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд▓ рдирдордХ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП:
  6. рд╣рдо btmp рдореЗрдВ рдПрдХ рдРрд╕реЗ рддрддреНрд╡ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдмрд╛рдЗрдЯ (j) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ (7, 11, 17 ...) рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред
  7. рдлрд┐рд░ рдирд┐рдореНрди 7 (рдХреЗ) рдмрд╛рд░ рдХрд░реЗрдВ:
  8. рд╣рдо btmp рдХреЗ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рд╢реЗрд╖ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд┐рдЯреНрд╕ k рдкрджреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, Res рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ
  9. рд╣рдо рд░реЗрд╕ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рдЫрд▓реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдкрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ
  10. btmp рдЗрд╕ рдирдВрдмрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИ, btmp modulo 256 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджрд╛рдИрдВ рдУрд░ 8-k рдмрд┐рдЯреНрд╕ рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  11. рдЕрд╕реНрдерд╛рдпреА рд╕реНрдерд╛рди рдореЗрдВ рд╣реИрд╢ рдХреЗ рдмрд╛рдж btmp рдХреЛ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд░рдЦреЗрдВ
  12. рд╣реИрд╢ рдЯреЗрдореНрдк


рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рдмрд╛рдЗрдЯ [] рдирдордХ = рдирдИ рдмрд╛рдЗрдЯ [16];

рдирдпрд╛ рд╕рд┐рдХреНрдпреЛрд░ рд░реИрдВрдбрдо ()ред рдиреЗрдХреНрд╕реНрдЯрдмрд╛рдЗрдЯреНрд╕ (рдирдордХ); // рдпрд╛рджреГрдЪреНрдЫрд┐рдХ 16byte рдирдордХ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ

byte [] hashedPassword = new SlowHasher ()ред рдЧрдгрдирд╛рд╢рд╛рд▓рд╛ ( рдирдпрд╛ SHA256 (), рдкрд╛рд╕рд╡рд░реНрдб, рдирдордХ);







рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╣реИрд╢ (рд╣реИрд╢ (рд╣реИрд╢ + рд░реЗрдирдб рд╕реЙрд▓реНрдЯ) + рд░рд╛рдЙрдВрдб рд╕реЙрд▓реНрдЯ) рд╣реИ ... рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП AES-256 рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП 256-рдмрд┐рдЯ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдореЗрд░реА рдорд╢реАрди (C2D 2.6) рдкрд░, рдПрдХ рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 0.25 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдирддрд╛ рд╣реВрдВред рдЙрдирдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВред рдЖрдк рд░рд╛рдЙрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдордп рдмрдврд╝реЗрдЧрд╛ред



рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдореНрдорд╛рдирд┐рдд рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ BouncyCastle рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рд▓рд╛рдЧреВ рдкрд╣рд▓реБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдордорд┐рдд / рдЕрд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреАрдврд╝реА, рдЖрджрд┐ред



рдпреБрдкреАрдбреА:

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рдЧреЛрджреА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ , рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ



All Articles