Skrytí e-mailových adres před roboty s využitím kryptografie v .NET
V dnešní době spamu je potřeba co nejvíce chránit e-mailové adresy před roboty, kteří procházejí web a sbírají adresy, aby je mohly zahltit reklamními maily. Abychom robota převezli, musíme zajistit, aby adresu, kterou máme uloženou v databázi, nerozpoznal a šel dál. K tomu nám pomůže právě kryptografie.
V článku Cryptography v .NET – Symmetric a Asymmetric encryption jsem nastínil základní aspekty kryptografie na platformě .NET. Rozlišili jsme si symetrické a a asymetrické šifry a vysvětlili, v čem spočívá rozdíl. V tomto článku si uvedeme příklad použití kryptografie z praxe. Zde uvedený postup není doménou jen nějakých vládních tajných organizací. Podobný postup při uchovávání e-mailů by si měl osvojit téměř každý programátor. Spam by pak dostal slušný zásah.
Pokud už nutně potřebujeme uchovat e-mailovou adresu uživatele našeho webu, měli bychom buď zaměnit znak @
za nějaké jiné vyjádření, nebo adresu zašifrovat. Potřebujeme-li pak e-mail zobrazit na stránce, bylo by naše dosavadní úsilí naprosto zbytečné, kdybychom ho zobrazili v čistém textu. Když však e-mail zobrazíme v podobě dynamicky generovaného obrázku, robot objekt opět nerozpozná a my máme vyhráno.
Nyní si ale ukažme, jak toho docílit. Aplikace se bude skládat ze dvou souborů, default.aspx a genimg.aspx. Druhý zmíněný má na starosti pouze vygenerování obrázku z textu a vypadá zhruba takto:
<%
if (Session[„text“] != null)
{
string text = (string)Session[„text“];
Bitmap newBitmap =
new Bitmap(400, 20, PixelFormat.Format24bppRgb);
Graphics g =
Graphics.FromImage(newBitmap);
SolidBrush gridBrush =
new SolidBrush(Color.FromArgb(0,0,0));
Font gridFont =
new Font(„Garamond“, 17, FontStyle.Regular, GraphicsUnit.Pixel);
g.FillRectangle(new SolidBrush(Color.FromArgb(255,255,255)), new Rectangle(0,0,400,20));
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.DrawString(text, gridFont, gridBrush,-1, -1);
Response.ClearContent();
// připravit hlavičku obrázku pro odeslání přes HTTP
Response.ContentType = „image/png“; // formát obrázku
MemoryStream tempStream = new MemoryStream();
// připravit data obrázku v patřičném formátu
newBitmap.Save(tempStream,ImageFormat.Png);
// vypustit data do prohlížeče
Response.BinaryWrite(tempStream.ToArray());
Response.End();
}
%>
Uvedený kód nepotřebuje vysvětlení. Více se o této problematice dozvíte ve výše zmíněném článku. Podotknu jen, že pro účely demonstrace jsem stringovou reprezentaci dešifrované e-mailové adresy uložil v objektu Session. V reálné aplikaci by se to zřejmě řešilo jiným způsobem.
Nyní přejdeme ke kódu, který řeší šifrování a následné dešifrování e-mailu:
<%@ Page Language=“C#“ %>
<%@ import Namespace=“System.IO“ %>
<%@ import Namespace=“System.Text“ %>
<%@ import Namespace=“System.Security.Cryptography“ %>
<script runat=“server“>
string original;
string roundtrip;
string repre;
byte[] encryptedData;
byte[] decryptedData;
byte[] dataToEncrypt;
void CryptoRound()
{
ASCIIEncoding textConverter = new ASCIIEncoding();
dataToEncrypt = textConverter.GetBytes(original);
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
encryptedData = RSA.Encrypt(dataToEncrypt, false);
decryptedData = RSA.Decrypt(encryptedData, false);
roundtrip = textConverter.GetString(decryptedData);
repre = textConverter.GetString(encryptedData);
}
void btnSubmit_Click(object sender, EventArgs e)
{
original = tbInput.Text;
CryptoRound();
lblC.Text = repre;
Session[„text“] = roundtrip;
}
</script>
<html>
<head>
</head>
<body>
<form runat=“server“>
<asp:TextBox id=“tbInput“ runat=“server“></asp:TextBox>
<asp:Button id=“btnSubmit“ onclick=“btnSubmit_Click“ runat=“server“ text=“Odeslat!“></asp:Button>
<br />
<asp:Label id=“lblC“ runat=“server“></asp:Label>
</form>
<img src=“genimg.aspx“ />
</body>
</html>
Pro zjednodušení příkladu jsem celý proces šifrování a dešifrování uložil do jedné metody CryptoRound()
. V ukázce používám několik proměnných:
- original – email zadaný do textového pole
- repre – šifrovaná reprezentace emailu
- roundtrip – text získaný dešifrováním, měl by být stejný jako „original“ (ukládám do objektu Session pro použití v genimg.aspx)
- bytové reprezentace jednotlivých stringů
Po klepnutí na tlačítko se text v TextBoxu zašifruje pomocí algoritmu RSA a následně dešifruje a zobrazí jako obrázek přes stránku genimg.aspx (<img src="genimg.aspx" />
). Celý mechanismus si můžete otestovat on-line, abyste si o jeho funkci utvořili lepší představu.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Nepodceňte UX na vašem webu: Proč na něm záleží?
10. dubna 2024 -
Proč investovat do nejvýkonnějších VPS s AMD EPYC procesory
14. června 2024 -
Umělá inteligence v IT
27. září 2023 -
Regulace digitálních služeb: Co přináší nové nařízení DSA?
20. února 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024