Получаю электронную подпись вот так:
byte[] planeBytes = null;
using (FileStream file = new FileStream(xmlFileName, FileMode.Open, FileAccess.Read))
{
planeBytes = new byte[file.Length];
file.Read(planeBytes, 0, (int)file.Length);
}
CAPICOM.SignedData signeddata = new CAPICOM.SignedData();
signeddata.Content = Encoding.UTF8.GetString(planeBytes);
CAPICOM.Settings settings = new Settings();
settings.EnablePromptForCertificateUI = true;
CAPICOM.Signer signer = new Signer();
var resultSignature = signeddata.Sign(signer, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
using (FileStream fileSig = new FileStream(signFileName, FileMode.Create, FileAccess.Write))
{
var resultBytes = Encoding.UTF8.GetBytes(resultSignature);
fileSig.Write(resultBytes, 0, resultBytes.Length);
}
}
Проверяю Крипто-Армом. Он находит подпись, но говорит, что он некорректна.
Attached подпись он признаёт мат. корректной, но не заслуживающей доверия.
Мне нужна именно detached подпись.
Здравствуйте, baranovda, Вы писали:
B>во-вторых переверни resultBytes задом наперёд и попробуй снова
utf-8 задомнаперёд? Мсье знает толк...
Здравствуйте, Философ, Вы писали:
Ф>Проверяю Крипто-Армом. Он находит подпись, но говорит, что он некорректна.
Ф>Attached подпись он признаёт мат. корректной, но не заслуживающей доверия.
Ф>Мне нужна именно detached подпись.
Насколько я помню, CAPICOM подписывает UTF-32-представление строки с base64 данных
Или что-то в этом духе. Поэкпериментируй с кодировками, проверь подпись руками. Давно этим занимался, но помню, что метод подбора помогает быстро