2013-08-06 4 views
-6

Я использую C#. Я хочу иметь возможность принимать текст от пользователя, а затем проверять его как целые числа. Если я захочу преобразовать String в int/long, я потеряю ведущие нули. Я хочу сохранить ведущие нули. Мой план состоит в том, чтобы этот текст вводился пользователем как строка.Шифровать строку (только цифры) в другую строку (только цифры)

Я хочу зашифровать эту строку (только цифры), так что зашифрованный текст результата также является строкой цифр. Есть ли простой способ сделать это в C#? Возможно ли это сделать? Есть ли альтернативы? Могу ли я иметь примеры, если это возможно?

Пример входных данных: "0"

Пример выходных данных (после шифрования): "0129021398013"

Некоторые требования:

  • Длина строки может варьироваться от 12-19 (эта длина может изменение в будущем). Я хочу симметричное шифрование. Мы можем сохранить шифрование простым использованием одного ключа и функции XOR (теперь для ... я хочу его улучшить). Я больше беспокоюсь о сохранении формата и о том, как это сделать.

  • Строка цифр означает строка 0,1,2,3,4,5,6,7,8,9 или любое сочетание этих сцепляются друг с другом.

  • Этот вопрос относится к шифрованию, сохраняющему формат. http://en.wikipedia.org/wiki/Format-preserving_encryption

Для тех, кто заинтересован, я в настоящее время сделать следующее (я не код на этой машине ... Я положу его позже):

  1. Получить пользовательский ввод в String INPUT.
  2. Преобразование INPUT в ulong (UInput).
  3. Создать шифр ulong с простым шифрованием -> cipherU = (UInput + 1)^SECRET_KEY
  4. Хранить шифр U внутри базы данных.

Проблема в том, что я теряю ведущие нули между шагами 1 и 2. Я не хочу потерять эти ведущие нули (например, «00123» имеет два нуля в начале, где «345123» не имеет) , Я полагал, что использование строк с только цифрами - лучший способ сохранить ведущие нули.

+0

Ааа, константные вниз голоса, но без каких-либо вопросов или предложений в разделе комментариев. Хорошо, что вы ребята. –

+0

@HenkHolterman Что вы подразумеваете под сепаратором? Является ли «integerS» классом или просто термином для String, содержащим только целые числа? Длина строки может варьироваться от 12-19 (эта длина может измениться в будущем). Я хочу симметричное шифрование. Мы можем упростить шифрование с помощью одного ключа и функции XOR (на данный момент ... я хочу улучшить его). Меня больше беспокоит сохранение формата и как это сделать. –

+0

Есть ли простой способ сделать это на C#? [Да] Возможно ли это сделать? [Да] Есть ли альтернативы? [Да] –

ответ

2

Вы можете использовать AES Crypto Service Provider, а затем сохранить вывод как двоичное строковое представление выходного массива байтов.

т.е. +12345 может зашифровать в «1001001010110001»

+0

Мне это нравится. Есть ли простой способ преобразования байтовых массивов в двоичную строку? Должен ли я преобразовать байты по байт или есть способ, которым я могу преобразовать всю вещь сразу (предварительно написанные методы в C# API)? –

+1

@MohammadS. Вы можете использовать [BitArray] (http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx) для преобразования массива байтов в биты. – AtinSkrita

+0

@atinskrita: Спасибо! –

Смежные вопросы