Я боролся с этим на протяжении многих лет и просто не могу отпустить это. Что бы я ни пытался, я не могу понять пример подписи электронной почты DKIM в Приложении А. Я проследил за ошибками, которые исправили заголовки в примере, само существование которого предполагает, что это должно работать. Хэш тела работает так, как ожидалось, но вычисляемая мной подпись — нет. Мне интересно, дефектный ли пример или я чего-то не понимаю в том, как он должен работать.
Закрытый ключ из Приложения C в RFC 6376
const string RSA_PRIVATE_KEY = @" -----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYtIxN2SnFC
jxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v/RtdC2UzJ1lWT947qR+Rcac2gb
to/NMqJ0fzfVjH4OuKhitdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB
AoGBALmn+XwWk7akvkUlqb+dOxyLB9i5VBVfje89Teolwc9YJT36BGN/l4e0l6QX
/1//6DWUTB3KI6wFcm7TWJcxbS0tcKZX7FsJvUz1SbQnkS54DJck1EZO/BLa5ckJ
gAYIaqlA9C0ZwM6i58lLlPadX/rtHb7pWzeNcZHjKrjM461ZAkEA+itss2nRlmyO
n1/5yDyCluST4dQfO8kAB3toSEVc7DeFeDhnC1mZdjASZNvdHS4gbLIA1hUGEF9m
3hKsGUMMPwJBAPW5v/U+AWTADFCS22t72NUurgzeAbzb1HWMqO4y4+9Hpjk5wvL/
eVYizyuce3/fGke7aRYw/ADKygMJdW8H/OcCQQDz5OQb4j2QDpPZc0Nc4QlbvMsj
7p7otWRO5xRa6SzXqqV3+F0VpqvDmshEBkoCydaYwc2o6WQ5EBmExeV8124XAkEA
qZzGsIxVP+sEVRWZmW6KNFSdVUpk3qzK0Tz/WjQMe5z0UunY9Ax9/4PVhp/j61bf
eAYXunajbBSOLlx4D+TunwJBANkPI5S9iylsbLs6NkaMHV6k5ioHBBmgCak95JGX
GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
-----END RSA PRIVATE KEY-----";
Заголовки из примера сообщения и подписи в Приложении A, с заголовком подписи, включая хеш тела, добавленным к подписанным заголовкам, как описано в разделе 3.7
const string HEADERS = @"Received: from client1.football.example.com [192.0.2.1]
by submitserver.example.com with SUBMISSION;
Fri, 11 Jul 2003 21:01:54 -0700 (PDT)
From: Joe SixPack
To: Suzie Q
Subject: Is dinner ready?
Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT)
Message-ID:
DKIM-Signature: v=1; a=rsa-sha256; s=brisbane; d=example.com;
c=simple/simple; q=dns/txt; i=[email protected];
h=Received : From : To : Subject : Date : Message-ID;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=";
const string EXPECTED_SIGNATURE = "AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHutKVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV4bmp/YzhwvcubU4=";
И, наконец, рассматриваемая логика. Со временем это стало намного более кратким, поскольку в структуру были добавлены различные криптографические функции, но я всегда получал одну и ту же неожиданную подпись.
var rsa = System.Security.Cryptography.RSA.Create();
rsa.ImportFromPem(RSA_PRIVATE_KEY);
var signature = rsa.SignData(Encoding.UTF8.GetBytes(HEADERS),
System.Security.Cryptography.HashAlgorithmName.SHA256,
System.Security.Cryptography.RSASignaturePadding.Pkcs1);
var signatureString = Convert.ToBase64String(signature);
Assert.Equal(EXPECTED_SIGNATURE, signatureString);
И как бы то ни было, вот что я рассчитал
PgpOeOGQgKDzYvwezymrJpa2KzjMkcOF86HaZNagCNuOwPMW67T+PgNfb1LyGeey07FsOhBQuQVUm36BFyvu8V3w6B/LYJITIfiC+GUA/C8/iJUTswSv9NOeZnjsebstqjI4LTuXRDqmQqex9TbW/8SA2rlZwegAyg0biKj75pg=
Подробнее здесь: https://stackoverflow.com/questions/790 ... 4871-valid
Действителен ли пример DKIM в RFC 6376 (и RFC 4871)? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как проверить подпись DKIM простого электронного письма, которое Yahoo не дает
Anonymous » » в форуме JAVA - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-