//ok, but new method is better //private byte[] ConvertStringToItsHash(string s) //{ // //if range or limit, not the count!!! // var primeNumbers = PrimeNumbersGenerator.Generate(s.Length / 2); // int arraysCount = (primeNumbers.Count + 1) * 2; // char[][] result = new char[arraysCount][]; // char[] charArray = s.ToCharArray(); // result[0] = new char[charArray.Length]; // Array.Copy(charArray, result[0], charArray.Length); // for (int i = 0; i < primeNumbers.Count; i++) // { // result[i + 1] = new char[(charArray.Length - 1) / primeNumbers[i]]; // for(int k = 0; k < result[i + 1].Length; k++) // { // result[i + 1][k] = charArray[primeNumbers[i] * (k + 1)]; // } // } // Array.Reverse(charArray); // result[arraysCount - 1] = new char[charArray.Length]; // Array.Copy(charArray, result[arraysCount - 1], charArray.Length); // for (int i = 0; i < primeNumbers.Count; i++) // { // result[i + 1] = new char[(charArray.Length -1) / primeNumbers[i]]; // for (int k = 0; k < result[i + 1].Length; k++) // { // result[i + 1][k] = charArray[primeNumbers[i] * (k + 1)]; // } // } // byte[] byteResult = new byte[32 * arraysCount]; // using (HashAlgorithm algorithm = SHA256.Create()) // { // for (int i = 0; i < result.Length; i++) // { // var str = new string(result[i]); // var bytes = algorithm.ComputeHash(Encoding.UTF8.GetBytes(str)); // Array.Copy(bytes, 0, byteResult, 32 * i, bytes.Length); // } // } // return byteResult; //} private byte[] GetHash(string s) { int arraysCount; if (s.Length <= 30) { var primeNumbers = PrimeNumbersGenerator.Generate(s.Length / 2); arraysCount = 2 * s.Length - primeNumbers[(primeNumbers.Count - 1) / 2]; } else { arraysCount = 60; } byte[] bytesResult = new byte[32 * arraysCount]; using (HashAlgorithm algorithm = SHA256.Create()) { var bytes = algorithm.ComputeHash(Encoding.UTF8.GetBytes(s)); Array.Copy(bytes, 0, bytesResult, 0, bytes.Length); for (int i = 0; i < arraysCount - 1; i++) { bytes = algorithm.ComputeHash(bytes); Array.Copy(bytes, 0, bytesResult, 32 * (i + 1), bytes.Length); } } return(bytesResult); }
public void GenerateListUpUntilLimit(int limit, int[] expectedPrimeNumbers) { var generator = new PrimeNumbersGenerator(); var resultPrimeNumbers = generator.Generate(limit); Assert.Equal(expectedPrimeNumbers, resultPrimeNumbers); }
public void GenerateEmptyListUpUntilOne(int limit) { var generator = new PrimeNumbersGenerator(); Assert.Empty(generator.Generate(limit)); }
public void GenerateListUpUntilLimit(int limit, int[] expected) { var generator = new PrimeNumbersGenerator(); Assert.Equal(expected, generator.Generate(limit)); }