Заменить число случайным числом - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу сделать свое собственное маленькое шифрование (оно не должно быть безопасным). Я подумал, что будет хорошей идеей, если введенный пароль будет преобразован в двоичный, а затем я хочу изменить все 1 на (2 | 3 | 9 | 7), поэтому, если бы у нас было

1101 = 2907 | 9703 ... и т. Д.

Поэтому, если мы введем 9703, мы сможем снова расшифровать его до 1101.

Но я не могу найти метод для их замены. Метод Replace () будет делать только это:

1101 -> 2202 | 1101 -> 9909

И да, я знаю, что это не очень хороший метод для шифрования чего-либо, но я просто хочу написать очень простое шифрование самостоятельно.

int[] replace_Ones = { 2, 3, 9, 7, 0 };

int ServerEncryption = 1101010000111001;

ServerEncryption.Replace(1, 2);

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Начиная с этого:

int[] replace_Ones = { 2, 3, 9, 7 }; // I removed the 0 ;)

long ServerEncryption = 1101010000111001;

Вы можете создать метод, который выполняет следующие действия:

long FunnyEncrypt( long pseudobinary )
{
    long result = 0;
    long scope = 1;
    while( pseudobinary > 0 )
    {
        //        place   2 or 3 or 7 or 9         0 or 1
        result += scope * GetRandomReplacement() * ( pseudobinary % 10 );
        scope *= 10;
        pseudobinary = pseudobinary / 10; // decimal right shift 110 / 10 -> 11
    }
    return result;
}

Отказ от ответственности: не проверено! Поправки приветствуются.

GetRandomReplacement оставлено для практики: D - но в основном это «выбрать случайное целое число из [0..3] и использовать его в качестве индекса в массиве [2,3, 7,9] ".

Пример:

example input: 1101

| iteration | input | result | scope | -> | input | result | scope | GetRandomRepl | 
| 1         | 1101  |   0    | 1     | -> |   110 |      7 |    10 |         7     |
| 2         |  110  |   7    | 10    | -> |    11 |      7 |   100 |         -     |
| 3         |   11  |   7    | 100   | -> |     1 |    307 |  1000 |         3     | 
| 4         |    1  | 307    | 1000  | -> |     0 |   2307 | 10000 |         2     |

=> Result = 2307

РЕДАКТИРОВАТЬ: изменилось на long после тестирования, не видел, что число слишком большое для int: https://dotnetfiddle.net/5X4lZu

0 голосов
/ 30 апреля 2020

Если проблема состоит в том, чтобы заменить значение '1' двоичной строки случайным значением в {2, 3, 9, 7}, вы можете сделать это следующим образом:

char[] replace_Ones = { '2', '3', '9', '7' };
        StringBuilder ServerEncryption =new StringBuilder("1101010000111001");
        Random r = new Random();

        for (int i=0 ; i < ServerEncryption.Length ; i++)
        {

            if (ServerEncryption[i] != '0')
                ServerEncryption[i] = replace_Ones[r.Next(replace_Ones.Length)];
        }
        Console.WriteLine(ServerEncryption);

dotnetFiddle

...