2011-11-03 2 views
14

문자열 및 그 반대로 바이트를 배열을 변환하는 데 사용 (기본적으로이하여 Rijndael class on MSDN에 주어진 예입니다) 바이트 배열을 문자열로 변환하지만 좋은 해결책이 아닌 것은 확실합니다. 내 목표는 파일에 암호화 된 텍스트 (예 : 암호)를 저장하는 것입니다. Encoding.Default으로 계속하거나 Encoding.UTF8Encoding 또는 다른 것을 사용해야합니까?인코딩 내가 문자열을 암호화하는이 코드를 사용

다른 OS로 파일을 이동하는 경우 암호화하고 해독하려고하면 저장된 값에 부정적인 결과가 발생할 수 있습니까?

답변

43

Encoding을 사용하면 임의의 이진 데이터를 텍스트로 변환 할 수 있습니다. Encoding은 진실로 인코딩 된 텍스트 인 바이너리 데이터를 가지고있는 경우를위한 것입니다.

대신 Convert.ToBase64String을 사용하여 이진 데이터를 텍스트로 인코딩 한 다음 Convert.FromBase64String을 사용하여 디코딩하십시오.

+0

감사 존 보일 확장 ASCII에 대한 자세한 정보를 원하시면 ... 시스템에서 시스템에

을 변경하지 않습니다. 심각한 버그에서 나를 구해줍니다. – Otiel

+9

또한 [Phil Haack의이 게시물을 확대하는 게시물] (http://feeds.haacked.com/~r/haacked/~3/5hyXGYRO0Bo/hazards-of-converting-binary-data-to-a-string.aspx) –

+0

http://stackoverflow.com/questions/646974/is-there-a-standard-technique-for-packing-binary-data-into-a-utf-16-string –

0

예, Encoding.Default은 컴퓨터의 현재 ANSI 코드 페이지이며 여러 컴퓨터/로캘간에 다를 수 있습니다. 데이터가 텍스트 데이터이고이를 이식성있게 만들려면 고정 된 인코딩 형식 (예 : UTF8)을 사용해야합니다.

그러나 데이터가 텍스트 데이터가 아니기 때문에 텍스트 인코딩을 사용하여 문자열로 변환 할 수는 없습니다. 가장 좋은 방법은 16 진수 또는 Base64 인코딩을 사용하거나 BLOB/바이트 배열로 유지하는 것입니다.

+0

이것은 분명히 텍스트 데이터가 아닙니다. 암호화를 수행 한 결과이므로 임의의 이진 데이터입니다. 여기서'인코딩 '은 부적절합니다. –

+0

그래, 데이터가 전혀 텍스트가 아님을 알았 더라면 약간은 분명해졌습니다. – Deanna

-1

메신저 100 % 여기에 확실하지만 난 Encoding.Default가 시스템 기본 인코딩을 의미한다고 생각하고 난 당신이 내가 UTF8 또는 다른 인코딩을 사용하는 것 인 경우 예 그

.. 시스템에서 시스템으로 변경할 수 있습니다 즉, 여기

http://en.wikipedia.org/wiki/Extended_ASCII

+1

아니요, UTF-8을 사용하면 좋은 해결책이 아닙니다.이 바이너리 데이터는 UTF-8로 인코딩 된 텍스트가 아닙니다. 임의의 이진 데이터입니다. –

관련 문제