Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.
Модератор: gaidar
Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
-
kibernetics
-
- Постоялец
-
-
- Сообщения: 945
- Зарегистрирован: 03.05.2006 (Ср) 13:31
- Откуда: Minsk
kibernetics » 17.05.2014 (Сб) 19:30
Народ, всем привет! Всё реже заглядываю на форум.. и в этот раз снова за помощью. Есть код рандомайзера, работающий на энтропии системы, но правда под .net.
А мне нужно сделать кое-какое приложение под vb6.0 основанное на этом генераторе. Прошу поомощи, кто перешёл на c# и помнит ещё бейсик. Вот сам код:
- Код: Выделить всё
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PrefCraw.Game
{
public class RandomCrypto
{
private Queue<byte> queue = new Queue<byte>();
private int QueueBuffer = 1000;
public RandomCrypto()
{
}
public RandomCrypto(int queueBuffer)
{
QueueBuffer = queueBuffer;
}
public int NextInt(int maxValue)
{
return (int)(NextDouble() * maxValue);
}
public int NextInt(int minValue, int maxValue)
{
int num = maxValue - minValue;
return (((int)(NextDouble() * num)) + minValue);
}
public T[] Shuffle<T>(T[] source)
{
T[] original = (T[])source.Clone();
T[] result = new T[source.Length];
for (int i = 0; i < original.Length; i++)
{
int pos = NextInt(original.Length - i);
result[i] = original[pos];
original[pos] = original[original.Length - i - 1];
}
return result;
}
public T[] Shuffle<T> (IEnumerable<T> source)
{
return Shuffle(source.ToArray());
}
private object LockObject = new object();
public byte[] NextBytes(int length)
{
lock (LockObject)
{
if (queue.Count < length)
AppendBytes(Math.Max(length, QueueBuffer));
byte[] buffer = new byte[length];
for (int i = 0; i < length; i++)
{
buffer[i] = queue.Dequeue();
}
return buffer;
}
}
}
}
Последний раз редактировалось
kibernetics 02.06.2014 (Пн) 3:58, всего редактировалось 1 раз.
-
Admiralisimys
-
- Постоялец
-
-
- Сообщения: 318
- Зарегистрирован: 01.06.2009 (Пн) 10:26
Admiralisimys » 18.05.2014 (Вс) 22:40
Привет
kibernetics.
Приведённый код это обёртка которая скрывает взаимодействие с .NET классом RNGCryptoServiceProvider, который является одним из криптографическим генератором случайных чисел (см.
использование криптографического генератора случайных чисел).
По этому, поставленная задача, если требуется сопоставимая стойкость генерации, уже будет сводится не просто к переводу кода, но также реализации криптографического генератора случайных чисел на подобии RNGCryptoServiceProvider на VB6.
-
kibernetics
-
- Постоялец
-
-
- Сообщения: 945
- Зарегистрирован: 03.05.2006 (Ср) 13:31
- Откуда: Minsk
kibernetics » 29.05.2014 (Чт) 0:00
Admiralisimys - большое спасибо за разъяснение. Вопрос снимаю тогда.
Вернуться в Раздел для Профессионалов
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14