2012-01-02 2 views
2

ASCII armor 메모리 스트림은 어떻게합니까? ASCII 외장은 이진 데이터를 인쇄 가능한 ASCII 문자열로 인코딩하는 프로세스입니다. 이것은 예를 들어 암호화에 사용됩니다."ASCII armor"는 어떻게 MemoryStream을 사용합니까?

C#에서 디코딩 지원과 함께 이것을 수행하는 표준 방법이 있습니까? API처럼? 그렇지 않으면 어떻게 할 수 있습니까? 문자열을 디코딩하는

string data = Convert.ToBase64String(theMemoryStream.ToArray()); 

사용 Convert.FromBase64String 방법 :

답변

7

당신은 거의 항상 인쇄 가능한 텍스트로 임의의 이진 데이터를 표현하기 위해 Base64 (또는 16 진수)를 사용한다 : 당신은 바이트 배열로 MemoryStream의 모든 데이터를 변환 MemoryStream.ToArray()을 사용할 수 있습니다

byte[] binary = ...; 
string text = Convert.ToBase64String(binary); 

... 

string text = ...; 
byte[] binary = Convert.FromBaseString(text); 

. 스트리밍 방식으로이 작업을 수행하면 약간 더 많은 작업이 가능하지만 실현 가능할 것입니다. ToBase64TransformFromBase64Transform 클래스를 사용하는 프레임 워크에서 지원되며 CryptoStream으로 스트림을 연결하는 데 사용할 수 있습니다. 결과는 ASCII로 인코딩 된 base64 스트림이됩니다.

+0

MemoryStream을 이미 바이트 배열에 의해 백업하지 않나요? ToArray()가 복사본을 만들지 않을까요? – Bengie

+0

@Bengie : 예, 복사 만합니다. 그러나 호출자가 염려하는 한 전환입니다. (GetBuffer는 사본을 만들지 않지만 기본 버퍼를 반환합니다.) –

2

당신은 이진 데이터의 합리적 소형 ASCII 표현을 얻을 base64로 인코딩을 사용할 수 있습니다.

2

확인 내가 Convert.FromBase64StringConvert.ToBase64String를 사용하여 내 암호를 한 일이 방법

당신 .. 당신이 다음 매개 변수와 같이 바이트 배열을 전달 할 수 에 더 많은 사진을 취소 할 수 있습니다 문서의 예를 확인 을 확인하십시오. ASCII armor에 지정된 링크에는 2 진 - 텍스트 인코딩의 가장 많이 사용되는 양식이 있으며 여기에는 base64을 사용할 수 있습니다. .net 라이브러리를 사용하여이 작업을 수행 할 수 있습니다.

//

public static string EncodeString(string s) 
     { 
      byte[] b = System.Text.Encoding.Default.GetBytes(s); 
      return Convert.ToBase64String(b, 0, b.Length); 
     } 

// 디코딩 인코딩

public static string DecodeString(string s) 
{ 
    byte[] b = Convert.FromBase64String(s); 
    return System.Text.Encoding.Default.GetString(b); 
} 
+2

"플랫폼 기본 인코딩으로 인코딩"** 암호화 **라고는 생각하지 않습니다. (거의 모든 경우에 플랫폼 기본 인코딩을 사용하지 말 것을 권장합니다.) –

+0

정보를 제공해 주셔서 감사합니다. –