Ключевой файл - это текстовый файл, содержащий последовательность строк.Каждая строка в файле ДОЛЖНА НЕ быть длиннее 72 8-битных байтов, за исключением символов окончания строки.
Ваша жестко закодированная строка содержит только одну строку с длиной 358 плюс строки BEGIN / END
Мы не можем видеть содержимое C: \ PubKey.txt .Выглядит файл так же?
Добавить <CR><LF>
в конце
sKey := '-----BEGIN PUBLIC KEY-----'#13#10 +
'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlAVd8PUhIiuA00vlUZYm0xrk+'#13#10 +
'UgyZxwWZSrysOJWk0POGJ91hUUqr659mBA7bg0i07Y4T+FYdA4iuvg5bT2aSMAGl'#13#10 +
'To3GRKvwX8RAnimQQNqkqDk3nf20OiEygwWDQr72fWzKLtuoo7Rd5onrXEp1qM3o'#13#10 +
'ywRq5Mwk4dHPX1F5EwIDAQAB'#13#10 +
'-----END PUBLIC KEY-----';
Также читайте о различиях ...
Различия между BEGIN RSA PUBLIC KEYи НАЧАТЬ ОБЩЕСТВЕННЫЙ КЛЮЧ
Со строками
ss := TStringStream.Create(sKey); ss.Seek(0,soFromBeginning);
Base64_to_stream(skey, ss);
вы делаете Base64_to_stream(skey, ss)
с включенными строками BEGIN ....
и END ....
Это должноbe
-----BEGIN PUBLIC KEY-----
BASE64 ENCODED DATA
-----END PUBLIC KEY-----
sKeyBEG := '-----BEGIN PUBLIC KEY-----'#13#10;
sKey := 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlAVd8PUhIiuA00vlUZYm0xrk+' +
'UgyZxwWZSrysOJWk0POGJ91hUUqr659mBA7bg0i07Y4T+FYdA4iuvg5bT2aSMAGl' +
'To3GRKvwX8RAnimQQNqkqDk3nf20OiEygwWDQr72fWzKLtuoo7Rd5onrXEp1qM3o' +
'ywRq5Mwk4dHPX1F5EwIDAQAB';
sKeyEND := #13#10'-----END PUBLIC KEY-----';
По сути, файлы PEM представляют собой просто кодированные в формате base64 версии данных, кодированных с помощью DER.Чтобы отличить извне, какие данные находятся внутри строки, закодированной в DER, верхний и нижний колонтитулы присутствуют вокруг данных .
Если вы хотите загрузить ключтекстовый файл с верхним и нижним колонтитулом, вам нужно найти способ отделить ключ от файла key.txt.Это не сложно.
В любом случае, Base64_to_stream(skey, ss)
можно применять только к клавише, но не к окружающему тексту.