2013-08-06 4 views
-6

C#을 사용하고 있습니다. 사용자로부터 텍스트를 가져 와서 정수로만 유효성을 검사 할 수 있기를 원합니다. String을 int/long으로 변환하도록 선택하면 선행 0이 없어집니다. 나는 앞의 0을 유지하고 싶다. 나의 계획은이 사용자 입력 텍스트를 String으로 유지하는 것이다.다른 문자열 (숫자 만)로 문자열 암호화 (숫자 만)

결과 문자열이 숫자 문자열이기 때문에이 문자열 (숫자 만)을 암호화하고 싶습니다. C#에서이 작업을 수행하는 쉬운 방법이 있습니까? 이것을 할 수 있습니까? 대안이 있습니까? 가능한 경우 예제가 있습니까?

예시 입력 "0"

출력 예 (암호화 후) "0129021398013"

일부 조건 : 문자열 길이는 12-19 다를 수

  • (이 길이 나중에 변경 될 수 있음). 대칭 암호화가 필요합니다. 단일 키와 XOR 함수를 사용하여 암호화를 간단하게 유지할 수 있습니다 ( 의 경우 ... 개선하고 싶습니다). 나는 형식 보존과 그 방법에 대해 더 걱정하고 있습니다. 숫자의

  • 문자열 0,1,2,3,4,5,6,7,8,9, 또는 함께 연결된 이들의 임의의 조합의 문자열을 의미한다.

  • 이 질문은 형식 보존 암호화를 참조한다. 관심이있는 사람들을 위해 http://en.wikipedia.org/wiki/Format-preserving_encryption

, 나는 현재 다음 작업을 수행합니다 (I이 시스템에서 코드를 필요는 없습니다 ... 나중에 그것을 놓을 게요) :

  1. 로 사용자 입력을 수신 String INPUT.
  2. INPUT을 ulong (UInput)으로 변환하십시오.
  3. 간단한 암호화로 암호 작성 ulong -> cipherU = (UInput + 1)^SECRET_KEY
  4. cipherU를 데이터베이스에 저장하십시오.

문제는 1 단계와 2 단계 사이에 선행 0을 잃게됩니다. 이러한 "0"(예 : "00123"은 "345123"으로 시작하는 두 개의 0이 없습니다) . 문자열을 숫자로만 사용하는 것이 선행 제로를 유지하는 가장 좋은 방법이라고 생각했습니다.

+0

아, 아래 일정 표하지만, 코멘트 섹션에서 아무 질문이나 제안으로 암호화 할 수 있습니다. 잘 됐네. –

+0

@HenkHolterman 구분 기호는 무엇을 의미합니까? "integerS"는 클래스 또는 정수 만 포함하는 String의 용어입니까? 문자열 길이는 12-19까지 다양합니다 (이 길이는 앞으로 변경 될 수 있음). 대칭 암호화가 필요합니다. 단일 키와 XOR 함수를 사용하여 암호화를 간단하게 유지할 수 있습니다 (지금은 ... 개선하고 싶습니다). 나는 형식 보존과 그것을하는 방법에 대해 더욱 걱정하고 있습니다. –

+0

C#에서이 작업을 수행하는 쉬운 방법이 있습니까? [예] 가능합니까? [Yes] 대안이 있습니까? [예] –

답변

2

당신은 AES Crypto Service Provider 사용 후 바이트 배열 출력의 이진 문자열 표현으로 출력을 저장할 수 있습니다.

즉 12345 "1001001010110001"

+0

나는 이것을 좋아한다. 바이트 배열을 바이너리 문자열로 변환하는 쉬운 방법이 있습니까? byte 단위로 변환해야합니까, 아니면 한 번에 전체 내용을 변환 할 수있는 방법이 있습니까 (C# API의 미리 작성된 메서드)? –

+1

@ 모함마드. [BitArray] (http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx)를 사용하여 바이트 배열을 비트로 변환 할 수 있습니다. – AtinSkrita

+0

@atinskrita : 고마워요! –