使用 Stream 读取私钥

Use Stream to read private key

使用 READER 更新以获取更多内容:

这个有效:

var privateKeyPath = @"C:\foo\DKIM Private Key.txt";
var signer = new DkimSigner(
    privateKeyPath, 
    mailKitConfiguration.Domain, 
    mailKitConfiguration.Selector);
signer.Sign(message, headersToSign);
    

如何改用 Stream 来工作? - 我什至不知道是我的 privateKey 变量还是我的 memory Stream 导致了我的麻烦。我试过这个:

var privateKey = @"-----BEGIN RSA PRIVATE KEY-----MICESDABCDEF..............KBgQDa3-----END RSA PRIVATE KEY-----";
var privateKeyBytes = Encoding.ASCII.GetBytes(privateKey);
using (var memory = new MemoryStream(privateKeyBytes))
{
    using (var reader = new StreamReader(memory))
    {
        var test1 = reader.ReadLine(); // test1: "-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQDa38lnCp4wTcuk0Dkl6zjbc9hkeTCLFa0F4pc7XCsDj......."
        var test2 = reader.ReadLine(); // test2: empty
        var test3 = reader.ReadLine(); // test3: empty
    }

    memory.Position = 0;

    var signer = new DkimSigner(
        memory, 
        mailKitConfiguration.Domain, 
        mailKitConfiguration.Selector
    );
    signer.Sign(message, headersToSign);
}

留言:

System.FormatException: Private key not found.

堆栈跟踪:

at MimeKit.Cryptography.DkimSignerBase.LoadPrivateKey(Stream stream)
at MimeKit.Cryptography.DkimSigner..ctor(Stream stream, String domain, String selector, 
DkimSignatureAlgorithm algorithm)

您不需要将流的位置重置为 0,构造函数 MemoryStream(byte[]) 已经从 0 开始。

您的密钥中需要换行符:-----BEGIN RSA PRIVATE KEY-----\r\n(data)\r\n---