hashavimo generatorius
- Atsikratyta dvigubo ciklo - konstitucija hašuojama žymiai greičiau (45 s -> 8 ms)
- Sukurtos pagalbines komandos(argumentai)
- Patobulintas algoritmas, kad atsikratyti koliziju
- (Turintiems CLion) Edit Run/Debug configurations -> Edit Configurations -> Nurodyti argumentus(komandas ir failų pavadinimus - iki 2 failų) eilutėje "Program arguments" Paleidimo argumentai:
- -help, -h, ? - pagalbos funkcija
- -file, -f [Failo vardas] - vieno failo nuskaitymas ir suhasavimas.
- -timer, -t [Failo vardas] - vieno failo nuskaitymas ir suhasavimas. Hasas neisvedamas i ekrana, tik ismatuojamas hasavimo laikas. (pvz.: start hash_generatorius.exe -timer konstitucija.txt)
- -line, -l [Failo vardas] - nuskaito kiekviena eilute ir ja atskirai suhasuoja.
- -collision, -col [Failo vardas] - atlieka kolizijos testa su kiekviena failo eilute. (pvz.: start hash_generatorius.exe -collision poros.txt)
- -write, -w, (programa paleidziama be argumentu) - leidzia rasyti hashavima ranka.
- -generate, -g: - sugeneruoja testinius failus. 1000 - sugeneruoja faila su 1000 simboliu. pairs - sugeneruoja faila su 100000 poru. diff - generuoja 100000 poru, kurios skiriasi tik vienu simboliu.
- -sha256 [Failo vardas] - palygina mano algoritma su SHA256 algoritmu
- -diff [Failo vardas] - palygina panasias poras ir % skirtinguma
create inputvec (16) empty vector of bytes
foreach(index = 0; i < input size; increment i by 1) do {
choose val from array of constants
define byte modifiedbyte = choose CHAR FROM INPUT
modifiedbyte XOR with val and ASSIGN to self
modifiedbyte MULTIPLY BY 5 and ASSIGN to self
modifiedbyte RIGHT BITWISE SHIFT BY 7u and ASSIGN to self
modifiedbyte ADD val and ASSIGN to self
inputvec[index] ADD modifiedbyte and ASSIGN to self
}
create bytevec (16) empty vector of bytes
foreach(byte : bytevec) do {
choose val from array of constants
ASSIGN val to byte
}
if(input size > 16) do {
for(i = 0; i < input size; increment i by 1 ) do {
ADD byte FROM input TO bytevec[position]
define sum = 0
foreach(byte : input) do {
sum ADD byte and ASSIGN to self
}
XOR sum of all bytes to bytevec[position] and ASSIGN to self
DEREFERENCE byte AT position XOR with input[i] BITWISE RIGHT SHIFT by 3u AND ASSIGN to self
increment position by 1
if(position > 16) do {
position = 0
}
}
} else do {
define position = 0
for(i = 0; i < 16; i++) do {
if(i == input size) do {
position = 0
} else do {
ADD input[position] to bytevec[i]
define sum = 0
foreach(byte : input) do {
sum ADD byte AND ASSIGN to bytevec[i]
}
BITWISE LEFT SHIFT bytevec[i] by 3u and ASSIGN to self
XOR bytevec[i] with input[position] and ASSIGN to self
position++
}
}
}
-
- Maišos funkcija generuoja vienodo dydžio bitų vektorius, kurie yra pilnai užpildomi nepriklausomai nuo įvesties dydžio. Vienodo dydžio bitų vektoriai, bet išvesties šešioliktainiu skaičiumi ilgis gali skirtis
-
- Maišos funkcija nenaudoja random elementų - hash kodas priklauso tik nuo įvesties.(Deterministinė funkcija)
-
- Silpnas sniego lavinos efektas - jis yra bet skirtumai nera labai dideli
-
- Algoritmas pakankamai atsparus kolizijoms
-
- Greitai veikia
-
- Outputo dydis gali skirtis
Rezultatas su tuščiu failu
Pridėtas funkcionalumas palyginti kelis failus, pagal šešioliktainio kodo ir pagal bitų skirtumą:
Rezultatas su dviem skirtingais failais, kuriuose yra tik vienas simbolis: A, ir a
Rezultatas su 1000 atsitiktinai sugeneruotų simbolių. Smarkiai skiriasi
Rezultatas su 1000 atsitiktinai sugeneruotų simbolių. Failas buvo nukopijuotas ir viena atsitiktinai pasirinkta raidė "t" buvo pakeista į raidę "h"
Rezultatas hašuojant konstituciją
Procesorius: AMD Ryzen 7 3700X
Kolizijų testai
Palyginimas su SHA256 algoritmu
Procentinis skirtingumas pakeitus 1 simbolį porose, 100 000 porų








