Esempio n. 1
0
        //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);
        }
Esempio n. 3
0
        public void GenerateEmptyListUpUntilOne(int limit)
        {
            var generator = new PrimeNumbersGenerator();

            Assert.Empty(generator.Generate(limit));
        }
Esempio n. 4
0
        public void GenerateListUpUntilLimit(int limit, int[] expected)
        {
            var generator = new PrimeNumbersGenerator();

            Assert.Equal(expected, generator.Generate(limit));
        }