2010-02-27 4 views
4

파이썬을 사용하여 임의로 주어진 키를 기반으로 문자열 섹션을 재정렬하십시오. 같은 키로 원래 문자열을 복원하려고합니다.키를 사용하여 문자열을 다시 배열하십시오.

def rearrange(key, data): 
    pass 

def restore(key, rearranged_data): 
    pass 

효율성은 중요하지 않습니다. 어떤 아이디어?

편집 :

+2

"섹션"을? "키"? 당신은 이보다 더 잘해야 할 것입니다 ... –

+0

이것은 매우 약하기 때문에 이것을 암호화/난독 화의 어떤 형태로 사용하지 않기를 바랍니다. –

답변

3

휠을 재발 명할 수 있지만 가능한 경우 먼저 encryption library을 시도하십시오.

+0

이미 pycrypto를 사용하고있어 이상적입니다. 나는 그런 알고리즘을 찾지 못했다. 그러나 문서는 상당히 제한되어있다. – hoju

+0

라이브러리의 알고리즘은 모두 "테스트"되어 널리 사용됩니다. 자신의 알고리즘은 거기에 없을 것입니다. AES를 선택하면 괜찮을 것입니다. – ghostdog74

+0

감사합니다 - AEA가 적합 할 수 있습니다. 불쌍한 모든 문서 문자열은 ... – hoju

4

사용 random.shuffle :

import random 

def rearrange(key, data): 
    random.seed(key) 
    d = list(data) 
    random.shuffle(d) 
    return ''.join(d) 

def restore(key, rearranged_data): 
    l = len(rearranged_data) 
    random.seed(key) 
    d = range(l) 
    random.shuffle(d) 
    s = [None] * l 
    for i in range(l): 
     s[d[i]] = rearranged_data[i] 
    return ''.join(s) 


x = rearrange(42, 'Hello, world!') 
print x 
print restore(42, x) 

출력 :

oelwrd!, llHo 
Hello, world! 
+0

광산은 더 빨랐지만 당신의 작품은 실제로 작동합니다. 그래서 광산을 삭제했습니다. –

1

sort()와 셔플 반전 구현 :

import random 

def reorder_list(ls, key): 
    random.seed(key) 
    random.shuffle(ls) 

def reorder(s, key): 
    data = list(s) 
    reorder_list(data, key) 
    return ''.join(data) 

def restore(s, key): 
    indexes = range(len(s)) 
    reorder_list(indexes, key) 
    restored = sorted(zip(indexes, list(s))) 
    return ''.join(c for _, c in restored) 
관련 문제