IP주소값을 최대한 짧은 길이의 문자열로 복호화하고 싶습니다.

zzf의 이미지

현재 게시판 스크립트를 만들고 있습니다.
익명성을 보장하기 위해 IP 주소를 복호화해서 표시하고 싶습니다.
md5같이 일방 통행 함수여야 하며, 역방향으로 원래의 IP를 계산하는게 불가능해야 합니다. 또한, 같은 IP는 항상 같은 결과가 나와야 하고, 서로 다른 IP 주소라면 다른 결과가 나와야 합니다.

원래의IP -> [복호화 함수] -> 복호화된 문자열
192.168.123.456 -> ???

md5가 딱이지만, md5의 결과값이 너무 길은지라 해당 목적으로는 적절하지 않습니다. 복호화된 문자열의 길이는 짧으면 짧을수록 좋습니다. 짧되 서로 다른 IP는 다른 결과가 나올 정도로는 길어야 되겠죠.

또 한가지 요구사항이 있는데, 소스를 공개해야 합니다. 즉, 암호화 과정이 밖에 노출된다 하더라도 안전해야 합니다.

이럴때 쓸만한 복호화 알고리즘이 뭔가 없을까요?

익명 사용자의 이미지

암호화는 md5sum으로 만들어서 DB에 저장할때는 전부 저장하고
게시판에 출력할때는 앞의 몇 문자열까지만 사용하는 것이 좋지 않을까요?

zzf의 이미지

그런 방법도 있겠지만, md5 문자열 자체가 그리 읽기 편한게 아니고, 또한 ip로 검색하는 기능을 넣을 때 32자나 되는 문자열을 입력하고 또 검색해야 되기 때문에, 좀 더 짧은 문자열이 나오는 복호화 알고리즘을 찾고 싶습니다.

익명 사용자의 이미지

md5sum을 정의역으로 하고 읽기 쉬운 문자열을 치역으로 하는, 양방향으로 동작하는 함수를 만드는게 어떨까요. md5sum은 충분히 큰 정의역을 가질 것 같은데요. 암호화 알고리즘을 새로 만드는것보다 훨씬 쉽고 원하는 바에도 합치할 것 같은데요.

정태영의 이미지

ip2long 을 이용해서 4바이트 정수로 바꿔버리면 아주 간단하게 되지 않을까요 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

zzf의 이미지

문제는, 다른 사용자가 복호화된 문자열을 보고 ip를 추측해낼 수 없게 해야 된다는 점입니다. 소스를 공개할 생각이라서, 복호화 과정을 비밀로 할 수도 없죠.

정태영의 이미지

zzf wrote:
문제는, 다른 사용자가 복호화된 문자열을 보고 ip를 추측해낼 수 없게 해야 된다는 점입니다. 소스를 공개할 생각이라서, 복호화 과정을 비밀로 할 수도 없죠.

왜 저런게 필요한지 잘 모르겠어서;; 더 뭐라고 말씀드렇기는 좀 그렇네요 흠흠

근데 토픽에서 벗어나기는 하지만... '복호화' 가 아니라 '암호화' 를 말하시는 거 같은데 용어를 계속 반대로 사용하고 계시네요...

http://help.webhard.co.kr/eps/faq/user/fuf_top10_02.jsp?site_id=0001&faq_id=330

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

zzf의 이미지

아 그렇군요;;; 암호화하고 복호화하고 같은줄 알았습니다 -_-;

가끔 ip 주소로 whois 해보면 직장이나 아파트 주소가 뜨는 경우가 있기 때문에, 사생활 정보가 누출됩니다. 근데 IP가 안보이면 한사람이 이름을 바꾸며 여러사람 행세를 하는 경우가 있기 때문에 또한 곤란하죠. 그래서 ip 주소를 암호화해서 출력하는 방법을 찾게 된 겁니다.

근데 md5는 32자나 하기 때문에 좀 쓰기 그렇죠-_-;; base64로 인코딩해도 24자...

일단 php의 crypt 함수 중에 Standard DES로 하는게 비교적 결과물이 짧게 나와서 그걸 쓰기로 했습니다.

hyperhidrosis의 이미지

des 의 경우 소스가 공개되면 원래의 ip로 쉽게 돌릴 수 있습니다.

차라리 위에 언급된것처럼 md5 를 사용하고 다시 이 내용을 축약해서

보여주는 방식을 사용하는것이 좋을듯 합니다.

예를 들자면 32자 문자열(실제로는 16바이트 데이타)의 앞의
16자만 보여준다던가,
16자+16자를 더해서 (오버플로우를 발생시키고) 16자로 만든다던가..
하면 충분히 해쉬된 결과갚을 얻을 수 있습니다.

사실 간단하게 해쉬함수를 만들어서 10자 정도의 알파벳+숫자로
표시되도록 하는게 제일 좋겠죠.. 그다지 어렵지도 않고요.

익명 사용자의 이미지

hyperhidrosis wrote:

...
사실 간단하게 해쉬함수를 만들어서 10자 정도의 알파벳+숫자로
표시되도록 하는게 제일 좋겠죠.. 그다지 어렵지도 않고요.

해쉬를 만드는 것은 어렵지 않겠지만, collision을 고려하게 되면 쉽지도 않습니다. md5, sha1등의 해쉬가 왜/어떻게 만들어졌는지도 고려해 보세요.
* 유일성을 보장해야 한다는...

* 따라서, 소스공개를 추구한다면, md5등(기존 기술)으로 구현하고, 그 부분은 오픈아키텍쳐를 추구하여, 사용자가 원하는 유형으로 만들어(plugin아키텍쳐 제공등) 끼어넣을 수 있도록 만드는게 좋아 보입니다. 물론, 끼어 넣는 부분에 대한 깔끔한/간결 인터페이스 제공이 좋겠지요.

serialx의 이미지

제가 도움이 될지는 모르겠으나..

구글에서 ip anonymization 키워드로 검색 해보세요.. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.