2012-09-19 2 views
4

tripleDES를 사용하여 내 사이트의 특정 페이지에 대한 쿼리 문자열을 암호화하는 매우 간단한 암호화 클래스가 있습니다. 나는 데이터베이스 ID를 기반으로 사람 페이지가 순차적으로 긁히는 것을 막기 위해이 작업을 수행합니다.암호화에 사용되는 문자 제한

어쨌든, 나는 그러나 this encryption method

을 사용했습니다, 그것은 3d% 및 쿼리 문자열에 안 및 보안을 위해 URL 검사에 의해 거부되는 다른 special characters이 포함되어 있습니다. 생성 된 실제 암호화 문자열에는 =이 있습니다. URL 검색을 변경하고 싶지는 않지만 한도 인 경우tripleDES crypto provider 또는 그 외의 경우 암호화 문자 또는 그 이상인 것으로 궁금합니다. 내가 encyrption에 대해 아무것도 알지 못하고 쿼리 문자열을 모호하게 만들 뿐이므로 쿼리 문자열 암호화에 관한 다른 옵션을 공개합니다.

+0

http://stackoverflow.com/questions/165808/simple-2-way-encryption-for-c-sharp – Killrawr

+0

querystring을 암호화하는 대신 사람들이 볼 권한이없는 페이지를 보지 못하게해야합니다. – ZippyV

답변

9

방법 당신은 암호화 된 바이트 배열을 변환하는 데 사용 Base64 encoding을 연결 한 - 9, +, /=.

그러나 마지막 3 개는 URL에 적합하지 않습니다.

Base35 문자열에 대해 간단하게 String.Replace을 수행하여 이러한 문자를 URL 안전 문자로 바꿀 수 있습니다 (예 : + =>-, / =>_= =>.입니다. =은 완전히 패딩 문자이기 때문에 끝에서 완전히 벗어날 수 있습니다. 처음 두 대체를 만들고 =을 삭제하는 것은 suggested by RFC3548입니다.

그런 다음 문자열의 암호를 해독하려면이 교체를 간단히 거꾸로 사용하십시오. =을 완전히 삭제 한 경우 문자열 길이가 4의 배수가 될 때까지 =을 추가하십시오.

+0

고마워요. 실제로 16 진수 문자열로 변환 해 버렸습니다. 그래서 그 트릭도했습니다. 같은 생각이에요, 답을 얻으세요! 다시 한번 감사드립니다. – user576838

3

당신이 무엇을하고 있는지 (그리고 당신이 무엇을하고 있더라도) 모른다면 당신은 암호를 버려서는 안됩니다. 대신 암호화를 그대로 사용하고 결과는 UrlEncode입니다. Z, a - - z, 0A를 포함하는 형태로 - 그것에서 "비 인쇄"바이트의 모든 종류를 가질 수 -

+0

이것은 "암호화를 사용하는 것"이 ​​아닙니다. 출력을 URL 인코딩하는 것 이상입니다. – Rawling

+2

암호화 문자를 제한 하시겠습니까? 나는 동의하지 않는다. 아래의 솔루션은 아니지만 유효한 문자가 무엇인지 암호화에 알리려고하면 키 공간이 엉망입니다. 인코딩을 변경하는 것은 다르지만 특히 OP의 질문이 아닙니다. OP 자체를 암호 자체를 수정하려고 시도하는 것을 시도하고 있습니다. – zimdanen

+1

오, 예, 지금 기억합니다. 나는 그 의견을 생각하고, 그때 그는 _ 암호로 암호를 변경하려 했으므로 주석을 달지 않기로 결정했다. 그리고 잊어 버리고 논평했다. 내 나쁜 :) – Rawling