دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
رمزنگاری نامتقارن Asymmetric در SQL Server
1404/04/18 -
کنترل MenuStrip در سی شارپ
1404/04/17 -
قفل گذاری روی اطلاعات در پایگاه داده SQL
1404/04/10 -
خروج کاربر غیرفعال در ASP.NET Core
1404/04/08 -
مفهوم ListView در سیشارپ
1404/04/07 -
کنترل ListBox در سی شارپ
1404/02/07
رمزنگاری نامتقارن Asymmetric در SQL Server

تعریف رمزنگاری نامتقارن (Asymmetric Encryption)
رمزنگاری نامتقارن یا Asymmetric Encryption، یک روش رمزنگاری است که از دو کلید متفاوت ولی مرتبط با هم استفاده میکند:
یک کلید عمومی (Public Key) و یک کلید خصوصی (Private Key). این دو کلید به صورت زوج به هم متصل هستند اما عملکردهای متفاوتی دارند.
کلید عمومی (Public Key) برای رمزنگاری :
برای رمزنگاری دادهها استفاده میشود و میتواند آزادانه در اختیار دیگران قرار بگیرد.
کلید خصوصی (Private Key) برای رمزگشایی:
دادههای رمزنگاریشده با کلید عمومی به کار میرود و باید کاملاً محرمانه و محافظتشده نگه داشته شود.
مزیت اصلی این روش، امکان انتقال امن دادهها بدون نیاز به اشتراکگذاری کلید رمزگشایی است.
فرستنده داده با کلید عمومی گیرنده، پیام را رمزنگاری میکند و فقط گیرندهای که کلید خصوصی دارد قادر به رمزگشایی و خواندن پیام است.
این روش باعث افزایش امنیت ارتباطات و محافظت از اطلاعات حساس در شبکهها و پایگاه دادهها میشود.
الگوریتمهای معروف رمزنگاری نامتقارن شامل RSA، ECC و DSA هستند که در سیستمهای امنیتی مدرن کاربرد گستردهای دارند.
مزایای رمزنگاری Asymmetric در SQL Server:
مزیت اصلی این روش، افزایش امنیت هنگام تبادل دادهها است؛ زیرا حتی اگر کلید عمومی افشا شود، بدون کلید خصوصی امکان رمزگشایی وجود ندارد. با هم مزایای این روش رو مرور میکنیم.
امنیت بالا با استفاده از دو کلید (Public/Private):
رمزنگاری نامتقارن از دو کلید جداگانه استفاده میکند، بنابراین حتی اگر کلید عمومی فاش شود، بدون کلید خصوصی امکان رمزگشایی داده وجود ندارد.
قابل استفاده برای سناریوهای رمزنگاری یکطرفه:
اگر فقط لازم است دادهای رمزنگاری شود ولی رمزگشایی فقط در دسترس مدیران باشد (مثلاً کد ملی، اطلاعات بانکی و...).
مناسب برای انتقال دادههای رمزنگاریشده بین سرورها:
میتوان کلید عمومی را برای رمزنگاری به کلاینت داد و رمزگشایی را فقط روی سرور انجام داد.
استفاده آسان در SQL Server بدون نیاز به کدنویسی پیچیده:
توابع داخلی مانند EncryptByAsymKey و DecryptByAsymKey کار را ساده میکنند.
محدود کردن دسترسی به رمزگشایی:
تنها کاربران دارای دسترسی به کلید خصوصی یا رمز عبور کلید میتوانند به اطلاعات رمزگشاییشده دسترسی داشته باشند.
عدم نیاز به نگهداری کلیدهای مشترک بین کاربران مختلف:
چون رمزنگاری و رمزگشایی با دو کلید متفاوت انجام میشود، نیاز به تبادل امن کلید کاهش مییابد.
ساختار کلید نامتقارن در SQL Server
✅ مرحله 1: ساخت کلید نامتقارن (Asymmetric Key)
-- مرحله ایجاد Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd#2025';
-- مرحله ایجاد کلید نامتقارن
CREATE ASYMMETRIC KEY ExampleName
WITH ALGORITHM = RSA_2048;
📌 این دستور کلید نامتقارن با الگوریتم RSA 2048 میسازد و با یک رمز عبور محافظت میشود.
برای مشاهده اطلاعات کلید asymmetric این دستور را اجرا کنید
SELECT * FROM sys.asymmetric_keys WHERE name = 'ExampleName';
✅ مرحله 2: رمزنگاری داده با کلید عمومی
DECLARE @EncryptedMessage VARBINARY(MAX);
DECLARE @Message NVARCHAR(100) = N'این یک پیام حساس است';
SET @EncryptedMessage = EncryptByAsymKey(AsymKey_ID('ExampleName'), @Message);
-- نمایش پیام رمزنگاری شده
SELECT @EncryptedMessage AS EncryptedMessage;
✅ مرحله 3: رمزگشایی داده با کلید خصوصی
-- مرحله رمزگشایی پیام
DECLARE @DecryptedMessage NVARCHAR(100);
SET @DecryptedMessage = CONVERT(NVARCHAR(100), DecryptByAsymKey(AsymKey_ID('ExampleName'), @EncryptedMessage));
-- نمایش پیام رمزگشایی شده
SELECT @DecryptedMessage AS DecryptedMessage;
✅ مرحله 4: حذف کلید رمزنگاری
-- حذف کلید نامتقارن Master Key (اختیاری)
DROP ASYMMETRIC KEY MyAsymmetricKey;
DROP MASTER KEY;
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
همین حالا شروع کنید و به دنیای دادهها بپیوندید!
مثال کاربردی در جدول با کلید نامتقارن (Asymmetric Key)
فرض کنید میخواهیم شماره کارت مشتری را رمزنگاری کنیم:
-
ساخت جدول:
CREATE TABLE Customers (
Id INT IDENTITY PRIMARY KEY,
FullName NVARCHAR(100),
EncryptedCard VARBINARY(MAX)
);
2. درج اطلاعات رمزنگاریشده:
-- مرحله 1: ایجاد Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Y@ssw26rd#w025';
-- مرحله 2: ایجاد کلید نامتقارن
CREATE ASYMMETRIC KEY MyAsymKey
WITH ALGORITHM = RSA_2048;
--اطلاعات کارت
DECLARE @CardNumber NVARCHAR(50) = '6037991234567890';
DECLARE @EncryptedCard VARBINARY(MAX);
---رمزنگاری
SET @EncryptedCard =EncryptByAsymKey(AsymKey_ID('MyAsymKey'), @CardNumber);
---درج جدول
INSERT INTO Customers (FullName, EncryptedCard)
VALUES ('Ali Rezaei', @EncryptedCard);
3. خواندن و رمزگشایی اطلاعات:
SELECT
Id,
FullName,
EncryptedCard,
CAST(DecryptByAsymKey(AsymKey_ID('MyAsymKey'), EncryptedCard) AS NVARCHAR(50)) AS CardNumber
FROM Customers;
❓ سوالات متداول در مورد کلید نامتقارن (Asymmetric Key)
🔸 1. تفاوت رمزنگاری Asymmetric و Symmetric در SQL Server چیست؟
ویژگی | Asymmetric | Symmetric |
---|---|---|
تعداد کلید | ۲ (عمومی و خصوصی) | ۱ کلید |
سرعت | کندتر | سریعتر |
امنیت | بیشتر در ارسال دادهها | مناسب برای رمزنگاری داخلی |
🔸 2. آیا کلیدهای Asymmetric در SQL Server قابل بازیابی هستند؟
خیر، اگر رمز عبور یا کلید خصوصی را گم کنید، رمزگشایی دادهها غیرممکن خواهد بود.
🔸 3. آیا میتوان کلید را به کاربر خاص محدود کرد؟
بله، میتوانید با استفاده از PERMISSIONS دسترسی به کلیدها را محدود کنید.
مثال:
🔸 4. آیا امکان پشتیبانگیری از کلیدها وجود دارد؟
خیر، کلیدهای Asymmetric را نمیتوان EXPORT کرد. اگر نیاز به پشتیبان دارید، از CERTIFICATE استفاده کنید.
🧠 نکات مهم امنیتی کلید نامتقارن (Asymmetric Key)
همیشه از رمزهای قوی برای ENCRYPTION BY PASSWORD استفاده کنید.
سطح دسترسی کاربران به کلیدها را مدیریت کنید.
از VIEWهای رمزگشاییشده استفاده نکنید؛ رمزگشایی را فقط در سطح اپلیکیشن انجام دهید.
⚠️ نکات امنیتی در محیط واقعی
کلیدها را با سطح دسترسی محدود در محیط واقعی مدیریت کنید.
رمز عبور کلید را در کد ذخیره نکنید؛ از Secret Manager یا فایلهای امن استفاده کنید.
اطلاعات رمزنگاریشده را در سطح اپلیکیشن رمزگشایی کنید (در صورت امکان).
📦 جمعبندی
موضوع | توضیح |
---|---|
روش رمزنگاری | Asymmetric (نامتقارن) با الگوریتم RSA |
مناسب برای | امنیت بالاتر، رمزنگاری اطلاعات حساس مثل رمز، شماره کارت، کد ملی |
عملکرد | کندتر از Symmetric ولی امنتر |
کاربرد عملی | ذخیره اطلاعات محرمانه در جداول SQL به شکل امن |
🎓 پروژه تمرینی رمزنگاری کد ملی دانشجویان با کلید Asymmetric
تمرین برای شما دانشجو عزیز دارم تا ببینم چقدر این مبحث یاد گرفتی.
یک پروژه طراحی کن که:
- اطلاعات دانشجویان شامل نام، کد ملی و شماره شناسنامه را دریافت کند.
- کد ملی را به صورت رمزنگاریشده ذخیره کند.
- قابلیت بازیابی رمزگشاییشده را داشته باشد.
🎯 اهداف پروژه کلید Asymmetric
- ایجاد کلید نامتقارن در SQL Server
- ایجاد جدول برای اطلاعات دانشجو
- ذخیره اطلاعات با رمزنگاری کد ملی
- بازیابی و رمزگشایی اطلاعات
🟦 1. ساخت کلید نامتقارن در پایگاه داده
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd#2025';
CREATE ASYMMETRIC KEY StudentAsymKey
WITH ALGORITHM = RSA_2048;
برای مشاهده اطلاعات کلید asymmetric این دستور را اجرا کنید:
SELECT * FROM sys.asymmetric_keys WHERE name = 'StudentAsymKey';
🟦 2. ایجاد جدول دانشجویان
CREATE TABLE Students (
Id INT IDENTITY PRIMARY KEY,
FullName NVARCHAR(100) NOT NULL,
NationalIdEncrypted VARBINARY(MAX) NOT NULL,
StudentCode NVARCHAR(20) NOT NULL
);
🟦 3. تابع درج دانشجو (با رمزنگاری کد ملی)
CREATE PROCEDURE AddStudent
@FullName NVARCHAR(100),
@NationalId NVARCHAR(10),
@StudentCode NVARCHAR(20)
AS
BEGIN
DECLARE @EncryptedNationalId VARBINARY(MAX);
SET @EncryptedNationalId = EncryptByAsymKey(AsymKey_ID('StudentAsymKey'), @NationalId)
INSERT INTO Students (FullName, NationalIdEncrypted, StudentCode)
VALUES (@FullName, @EncryptedNationalId, @StudentCode);
END;
🟦 4. تابع خواندن اطلاعات و رمزگشایی کد ملی
CREATE PROCEDURE GetAllStudents
AS
BEGIN
SELECT
Id,
FullName,
NationalIdEncrypted,
CONVERT(NVARCHAR(100), DecryptByAsymKey(AsymKey_ID('StudentAsymKey'), NationalIdEncrypted)) AS NationalId,
StudentCode
FROM Students;
END;
🧪 5. تست پروژه
EXEC AddStudent
@FullName = N'زهیر صفری',
@NationalId = '1234567890',
@StudentCode = 'STU-1401';
مشاهده دانشجویان:
EXEC GetAllStudents;
دوره های مرتبط

آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .