16자리 숫자를 10자리로 변환하는 방법

greenwod의 이미지

안녕하세요... 무지막지하게 고민하다가 질문을 올립니다.

문제는 숫자 16자리를 암호화 하여 10자리 이하로, 아니 최대한 12자리 정도까지 압축해야 하는데요

16자리를 암호화 하여 12자리 이하로 만든 후 네트워크로 전송해서 받은 숫자를 16자리로 복호화를 하고 싶습니다.

무조건 문자가 아닌 숫자이어야 합니다.

물론 굳이 암호화가 아니더라도 숫자를 줄여서 전송한 후 다시 이를 받아서 16자리로 만들수 있는 방법을 알고 싶습니다.

다시 말해서 1234567890123456 이라는 16자리 숫자를 1234567890 이라는 10자리 숫자로 변환한 후 이를 전송하면 1234567890 이라는 암호화된 숫자를 가지고 1234567890123456 이라는 숫자로 변환하는 암호화 기법을 알고 싶습니다.

물론 파일이나 데이터베이스를 이용하지 않아야 합니다.

어떠한 방법을 사용하면 좋을까요??

많은 고수분들의 답변 부탁드립니다.

그럼 수고하십시오..

익명 사용자의 이미지

숫자 16자리라고 하셨으니, 한 문자를 encoding 해보면, 이진수로 표현
0000(0) ~ 1001(9) 이네요. 결국 한문자를 표현하는데 4bits 가 필요하다는
얘기구요, 한자리당 4bits로 encoding을 하면 16자리가 8자리로 줄겠네요.

다른 방법은, 0000000000000000 ~ 9999999999999999 라는 숫자로 생각하고 bit로 표현해도 될것 같네요.
계산해보니, 가장 큰 수가 100011 10000110 11110010 01101111 11000000 11111111 11111111 으로 변환되니까, 7 bytes 면 되겠네요.

더 생각해보면 더 효율적인 방법도 있을법 한데.....
다른분들이 더 좋은 의견주시겠죠 ?

익명 사용자의 이미지

이미 존재하는 표준화된 오픈소스 암호화 라이브러리를 사용하세요. 대부분의 자체개발 암호들(심지어 MS 조차도)은 언젠가 깨지게 되어있습니다.

greenwod의 이미지

단순히 암호화 하는 목적은 아닙니다. 암호화가 아니라 단지 16자리 숫자를 10자리로 줄이고 이것을 다시 10자리로 만드는 방법을 말하는것이지요..
저는 통신관련 프로그램을 하고 있는데요... 전화를 하면 전화번호와 함께 다른 6자리 숫자 데이터를 넣어서 보내려고 합니다. 하지만 교환기에서나 휴대폰이 각각 받을 수 있는 숫자의 길이가 달라서 10자리로 줄여서 이를 보내면 이를 다시 16자리로 변환하는 일을 하고자 하는것입니다.
다시말해서 16자리는 단순히 전화번호라고 생각하시고 이것을 10자리로 줄인다고 생각해주시면 됩니다. 그러니까 16진수에서도 사용하는 abcdef도 안되고 무조건 숫자로 10자리를 교환기에 보내야 합니다.
다시한번 자세한 답변 부탁드립니다.

kane의 이미지

전화쪽은 통신이 어떻게 이루어지는지 몰라서 greenwod님이 어떤 문제를 해결하고자 하시는 건지 명확하지는 않지만,
단순히 데이타 크기를 줄여서 전송하고 후에 복구하고 싶으신 거라면 방법이 없을 것 같습니다.
위에서 손님2님께서 말씀해주신대로 ASCII 방식이라면 binary 방식으로 변환하는 식의 방법은 있을 수 있을 겁니다. 압축 가능한 데이타라면 압축해서 보내는 방법도 있겠죠.
하지만 제가 지금 생각하기에는 원하시는 방법이 아닌 다른 방법으로 문제를 해결하셔야 될 것 같습니다.

greenwod의 이미지

혹시나 해서 질문 드리는 것입니다.

물론 단순히 숫자를 줄이는 것이라면 힘들겠지만 어떤 키값이나 잘 정리된 메트릭스 또는 어떠한 규칙을 정해놓고 해결하는 방법을 묻고 싶습니다.

암호학 책을 보면 대부분 인수분해와 모듈러 연산, 어떠한 특정한 메트릭스를 가지고 하는 방법이 존재하더군요

물론 숫자가 규칙적으로 줄어들지는 않았습니다만..

이러한 방법을 가지고 할 수 있는 알고리즘이 혹시나 있는지 알고 싶습니다.

XOR 연산을 가지고 시도 해봤는데 그것도 그리 좋은 방법은 아닌듯 싶더군요..

혹시 좋은 방법이 있는지 여러 고수님들의 의견을 듣고 싶습니다.

익명 사용자의 이미지

kane 님 말씀처럼 실제 사용되는 조건(환경)이 어떤지 모르기 때문에,
경우에 따라서는 가능한 꼼수가 존재할 수는 있겠는데요..

원하시는 암호화는 둘째 치고,
16자리를 10자리로 만들고 다시 복원하는 것은
비손실 압축으로 분류 될 것 같은데요..
일반적인 정보 이론을 생각해 볼 때,
"모든 code에 대해서 언제나" 일정한 압축율 이상을 낼 수 있는 방법은 없는데요..
:cry:

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.