2013-05-13 2 views
0

Я много искал в Интернете, не мог найти то, что мне нужно. Я нашел строку string или md5, которая не возвращает int и т. Д.Шифровать строку в int в C#

Так что мне нужно немного знать, как я могу зашифровать строку в int. Структура, над которой я работаю, используется некоторое время, поэтому я не могу ее изменить.

В какой-то момент у меня есть UniqueID свойство, которое должно быть идентификатор объекта, но иногда null, поэтому я не могу использовать его, так что мне нужно использовать два других ID-ы, чтобы создать уникальный идентификатор, назначить моему UniqueID, что-то вроде string.format("{0}-{1}", branchId, agentId), затем зашифровать его в int, назначить ему UniqueID, который будет отправлен любому методу, дешифровать UniqueID обратно в строку и разделить на «-» и получить мои два идентификатора. И упомянуть, что у меня нет забот о безопасности. Благодарен за вашу помощь.

+0

Как долго длится строка? Должно ли это одно целое число? Обратите внимание, что хеширование не может быть отменено ... –

+0

@ErnodeWeerd он должен быть отменен, вот и все, и о длине ... два идентификатора, я не думаю, что будет более 150 000 записей в каждый стол, возможно, что-то вроде «150.000-150.000» – bokkie

+1

Я сомневаюсь, правильно ли вы используете термин «шифрование». Если вы чувствуете, что пытаетесь создать уникальный идентификатор, а не зашифрованную строку. –

ответ

1

То, о чем вы просите, не может быть сделано в целом. У вас есть два номера, каждый из которых может варьироваться от 0 до 150 000. Требуется 18 бит для представления 150 000. Таким образом, для представления двух чисел потребуется 36 бит. int32 - 32 бита.

Если вы не можете использовать некоторые специальные знания о взаимоотношениях между ветвями и агентами (если они есть), тогда невозможно будет сжать эти 36 бит в 32-битное целое число.

Вы можете, однако, создать таблицу поиска, которая назначает уникальный ключ каждой паре ветви-агента. Простой инкрементный ключ. Затем вы могли бы построить пару (например, «142096-037854») и найти идентификатор. Или, учитывая идентификатор, найдите пару ветви/агента.

+0

Будучи первым ответом, я соглашусь с этим и даю ему голосование, спасибо за то, что вы сделали все более ясным. – bokkie

0

Если есть способ сжать два 18-битных номера на 32 бита, я, конечно, не знаю об этом. Если вы не можете быть уверены, что два идентификатора могут находиться под 65536 (или один из них под 16384), то лучшее, что я могу придумать, - это для вас, чтобы изменить UniqueID на долгое - тогда это прямо, без строк, просто поместите AgentId в первые 32 бита и branchId в последние 32 бита.

+0

спасибо, но, как я уже упоминал ранее, свойство UniqueID damn является частью структуры, с которой я работаю, и не могу ее изменить, она так долго использовалась. В противном случае я бы сделал это строкой и не нуждался бы в этой истории ... спасибо в любом случае – bokkie

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