Я генерирую открытый ключ и секретный ключ и хочу сохранить открытый ключ в строковом поле. Сохранение его в файл отлично работает. но как я могу получить его в строку ...Сохранение 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. Как я получаю ту же строку в текстовом файле
Строка из кода выше:
??? г} у л: |.?? 5 тест ??? Wh ?? $ ??? _ ?? сН ??? л ~ ?? + ?? Bc $? Р.Н. ?? г?. ?? м? С ???? 0? Z ??? к ??? G ?? mzBQ $ U? E ?? V |/?, l ??? = ???? ???? ?? 5 %% 9 ?? ае S |?? 8Lh \ ??? |? Рв ?? G * 8 ???? N9' ??? + (|? R ?? Q @ R ?? _9D
Если я использую кодировку ASCII, строка
?? Втч {?? ;? CGX ?? Hồ) ??? С ~ ???? т Ros 4 ??? :?????.? ?????? Е фФ U г + = р ??? # л ????? в ?? B} ???? - о ?? д ??? i5 Испытание? Wh? ? U? + U ??????????? v ?????? BJEwp * 0? '? Lz2 ?? 6 ?? P, A ??? Q ?? 2M ?? 3? W ?? 9 ??? * ???? M% |?? U ^> ?????? д? & ?? В ?? N
Текст из файла Pub2.asc
----- BEGIN PGP ОТКРЫТОГО КЛЮЧА БЛОК ----- Версия: BCPG C# v1.8.1.0
mIsEV2h5lwEEAJakqTE + XcRBQ0b2P2vjNuDrgi9IcCsgEGdD3bpH6d1W8CSR + YkZ Е.В./PwmNI1dyh8Ex + zqHQKwaPCIfEQhNjF2sIJKVyTtjpZ4YukoRto3PBjdse0zAB 2Freiv7Ha9ct0wSQRwID2haKbXpCUSQN5/j8xbx90y60ddxsOoV8C7A1AAUTtAR0 ZXN0iJwEEAECAAYFAldosdcACgkQPIdhk1pxnGAhxwQAg4NRYbuSDg5WVw3G1tVm 1xM746 + O5J6B5RHnaQvFePpVVUm/tpLyCbHPNeYlJao5FeHRYWWpU4d8OExo4phc iv7JfHBCx9tHKso4uccS3ROaTjknw + jwuLErKLN8UvjaUUBSn8wVXzlEDVXSRYCt Vnwv/Sxsxe7mgT2qBJSYcKY = = PYEC ----- END PGP PUBLIC KEY BLOCK -----
Вы используете 'ArmoredOutputStream' при записи файла, а' MemoryStream, как поток() 'на Струна? В вашем методе get string попробуйте установить 'stream' в новый' ArmoredOutputStream', например 'var stream = new ArmoredOutputStream (stream);' как быстрый взлом, чтобы увидеть, что получилось – ethorn10
Я попытался добавить этот var stream = new MemoryStream() как Стрим; stream = new ArmoredInputStream (поток); Когда я запустил это, я получаю исключение: «System.NotSupportedException» в BouncyCastle.Crypto.dll на следующей строке publicKey.Encode (stream); – katie77
'ArmoredOutputStream' не' ArmoredInputStream' – ethorn10