공개 키와 비밀 키를 생성하고 공개 키를 문자열 필드에 저장하려고합니다. 파일에 저장하면 정상적으로 작동합니다. 하지만 문자열로 가져 오는 방법은 무엇입니까?문자열에 PgpPublicKey 저장
private string SaveAndReturn(PgpPublicKey publicKey, bool armor = true)
{
var fileStream = new FileInfo([email protected]"C:\encrypt\Keys\pub2.asc").OpenWrite() as Stream;
SaveFile(publicKey, fileStream, armor);
fileStream.Close();
var keyString = GetStringFromKey(publicKey);
return keyString;
}
public void SaveFile(PgpPublicKey publicKey, Stream outStream, bool armor = true)
{
if (armor)
{
outStream = new ArmoredOutputStream(outStream);
}
publicKey.Encode(outStream);
outStream.Close();
}
private string GetStringFromKey(PgpPublicKey publicKey)
{
var armor = true;
var stream = new MemoryStream() as Stream;
publicKey.Encode(stream);
stream.Position = 0;
var keyString = GetString(stream);
stream.Close();
Console.WriteLine(keyString);
return keyString;
}
private string GetString(Stream theStream, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
using (var reader = new StreamReader(theStream, encoding))
{
return reader.ReadToEnd();
}
}
pub2.asc 파일은 잘 생성되고 거기에 있습니다. 키를 파일에 저장하는 대신 문자열에 넣고 싶습니다. 다음 코드는 빈 문자열을줍니다. 내가 도대체 뭘 잘못하고있는 겁니까? 그래서 스트림을 읽기 전에 위치를 설정하도록 코드를 업데이트했습니다. 하지만 반환 된 문자열은 파일에 표시된 텍스트와 다릅니다. ArmoredOutputStream이 Base64 인코딩을한다고 생각합니다.
??? Z} U L : 어떻게 위의 코드에서
문자열 텍스트 파일과 같은 문자열을 얻을 수 |?.????? (5) 시험? ㅁ ?? $ ??? _ ?? cH | L || + | Bc $? rN? g?. ?? m? s? 0? Z? k? -G? m · B · Q $ U · E · V |/λ, l '= p! (8) (8) (8) (8) (9) (9) (9) ? I는 ASCII 인코딩을 사용하는 경우는 _9D
, 문자열
? ㅁ {?? 이다? CGX ?? HO) C ?? ~ ???? t ROS 4 ??? : E · fF · U · r · + = = p · L · A · A · B} - Ff.?6 ?????????????????????????????????????????????????????????????? 뭐라구? ? U? + U? U? V? BJEwp * 0? '? lz2? 6? P, A? Q? 2M? 3? a ≤ W ≤ 9 ≠ M ≥ M ≥ | U |> q | Pub2.asc에서 &? V? N
텍스트 파일
----- BEGIN PGP PUBLIC KEY BLOCK ----- 버전 : BCPG의 C#을 v1.8.1.0
mIsEV2h5lwEEAJakqTE + + XcRBQ0b2P2vjNuDrgi9IcCsgEGdD3bpH6d1W8CSR YkZ EV/PwmNI1dyh8Ex + zqHQKwaPCIfEQhNjF2sIJKVyTtjpZ4YukoRto3PBjdse0zAB 2Freiv7Ha9ct0wSQRwID2haKbXpCUSQN5/j8xbx90y60ddxsOoV8C7A1AAUTtAR0 ZXN0iJwEEAECAAYFAldosdcACgkQPIdhk1pxnGAhxwQAg4NRYbuSDg5WVw3G1tVm 1xM746 + O5J6B5RHnaQvFePpVVUm/tpLyCbHPNeYlJao5FeHRYWWpU4d8OExo4phc,363,210 iv7JfHBCx9tHKso4uccS3ROaTjknw + jwuLErKLN8UvjaUUBSn8wVXzlEDVXSRYCt Vnwv/Sxsxe7mgT2qBJSYcKY = = PYEC ----- END PGP PUBLIC KEY BLOCK -----
에서 유용한 정보를 통해 찾을 수 있습니다,하지만 스트림으로'MemoryStream을()'에 그 끈? get string 메소드에서, 우리가 얻은 것을보기 위해 빠른 해킹으로'var streams = new ArmoredOutputStream (stream); '과 같은 새로운'ArmoredOutputStream'에'stream'을 설정해보십시오. – ethorn10
var stream = new MemoryStream() 스트림으로; stream = new ArmoredInputStream (stream); 이 스크립트를 실행하면 Exception이 throw됩니다. 다음 줄의 BouncyCastle.Crypto.dll에서 'System.NotSupportedException'publicKey.Encode (stream); – katie77
'ArmoredOutputStream'이 아닌'ArmoredInputStream' – ethorn10