2014-10-10 3 views
0

나는 암호를 암호화하고 파일에 저장하기 위해 AES (PyCrypto)를 사용하고 있습니다.파이썬에서 파일의 암호화 된 문자열 저장 및 읽기

user:username 
key:<encrypted key> 

그리고 이것은 내가 암호화에 사용하는 방법입니다 : : 파일의 형식은

이제
BLOCK_SIZE = .. 
PADDING = .. 
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING 

EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) 
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) 
cipher = AES.new("abcdefgh12345678") 

encrypted_key = EncodeAES(cipher, 'ABC123') 

, 내가 그것을 해독 파일에서 키를 읽을 어떻게? line.split (":")을 사용하면 암호화 된 키 자체에 ":"문자가 있으면 문제가 발생하지 않습니까?

암호화하는 동안 ":"을 피할 수있는 방법이 있습니까? 또는 키를 저장하는 더 좋은 방법이 있습니까? 다른 기능을 위해 키가 필요하기 때문에 해싱을 사용할 수 없습니다. 감사.

답변

2

이제 암호 해독을 위해 파일에서 키를 읽는 방법은 무엇입니까? line.split (":")을 사용하면 암호화 된 키 자체에 ":"문자가 있으면 문제가 발생하지 않습니까? 당신이 partition을 사용할 수 있습니다, 또는

key, value = line.split(':', 1) 

:

key, _, value = line.partition(':') 

둘 사이의 차이가

는 물론 그것은-그 것이다 정확히 split 두 번째, 선택적 인수 max_split을 가지고 이유 콜론이 전혀 없을 때 어떻게 될까요? 전자는 한 요소를 반환하고 ValueError은 두 변수로 압축을 푸는 반면, 후자는 빈 value을 제공합니다.


그러나, 당신이 자료 (64), :을 사용하는 경우 결코 처음에 표시 않을 것을 주목할 가치가있다. Base 64에서 사용되는 유일한 문자는 A-Z, a-, 0-9, +/입니다. Base 64 변종 중 일부는 :을 사용하지만 파이썬의 base64 모듈이 적용한 표준 버전은 사용하지 않습니다.

+0

아 맞습니다.미안, 나는 그것을 몰랐다. 수면 부족. 감사. – drunkenfist

0

스토어 다음

username 
p4ssw0rd 

당신이 일 이런 종류의 작업을 수행 할 필요가 없습니다이 방법으로 두 번째 줄의 첫 번째 행과 암호에 사용자 이름.

데이터베이스의 이러한 종류의 것들을 저장하는 것이 가장 좋은 솔루션이지만.

+0

감사합니다.하지만 키 : 값 형식이어야합니다. 각 사용자마다 여러 속성이 있으며 어떤 순서로도 사용할 수 있습니다. – drunkenfist

+0

그럼 진짜 형식을 사용하도록 제안합니다. 예를 들어 파이썬에서 쉽게 사용할 수 있습니다. JSON. 수동으로 구문 분석하는 것보다 코드가 훨씬 적습니다. – dom0

0

당신이 수행 얼마나 많은 분할 제한 할 수 있습니다

>>> line="key:foo:bar:baz" 
>>> line.split(":", 1) 
['key', 'foo:bar:baz'] 

을만큼 당신은 필드 이름이없는 알고 '을'이, 이것은 잘 작동합니다.