【问题标题】:Decrypting the column level SQL encrypted values using C#使用 C# 解密列级 SQL 加密值
【发布时间】:2017-11-22 23:49:30
【问题描述】:

我已经开始阅读和试验 C# 中的加密和解密技术

我已经使用以下链接中提供的信息在 SQL Server 2008 中尝试了数据加密和解密

http://www.c-sharpcorner.com/UploadFile/chinnasrihari/data-encryption-and-decryption-in-sql-server-2008/

通过使用以下查询(来自链接示例),我可以使用 SQL 查询解密一个值

OPEN SYMMETRIC KEY Sym_password
DECRYPTION BY CERTIFICATE Cert_Password WITH PASSWORD = 'Password!2';
SELECT CAST(DECRYPTBYKEY([Password]) as varchar(200))
FROM Security
CLOSE SYMMETRIC KEY Sym_password;

如何在我的 C# 应用程序中执行相同的操作?

在我的 MVC 应用程序中,我使用电子邮件地址作为登录用户名(默认情况下,密码使用简单成员身份进行哈希处理)。请建议我在 SQL 级别加密电子邮件字段并在 C#(应用程序级别)中解密这些值的最佳方法

当用户在应用程序中输入他的用户名(电子邮件)时,我如何在应用程序端加密该值并将其与 SQL 记录中的加密值进行比较。

【问题讨论】:

  • 对 SQL Server 2008 的主流支持已于 2 年前结束。考虑在 SQL Server 2016 (docs.microsoft.com/en-us/sql/relational-databases/security/…) 中迁移到列级加密。这允许加密由 SQL Server 客户端 API 完成,而不是服务器对您的代码透明。
  • 感谢@DanGuzman 提供信息。但不幸的是,我现在只有 2008 版。
  • 是否需要加密邮件?为什么不使用加盐哈希?

标签: c# sql-server encryption cryptography simplemembership


【解决方案1】:
CREATE TABLE [Users] (
    UserID int identity(1,1) primary key,
    [Login] varchar(32) unique,
    [Email] varchar(32) unique,
    [Password] varbinary(256) not null,
    [BackupCode] varbinary(256) not null,
    ModifiedDate datetime default (getdate()));

DECLARE @EncryptionKey nvarchar(32) = '007London' ;
DECLARE @Password varchar(32) = 'LoveDanger&Romance' ;
DECLARE @Code varchar(32) = 'GoNawazGo' ;

插入查询(加密):

INSERT [Users] ([Login], [Email], [Password], [BackupCode])
SELECT 'JamesBond', 'test@test.com',
    EncryptByPassPhrase(@EncryptionKey, @Password),
    EncryptByPassPhrase(@EncryptionKey, @Code),

选择查询(解密):

 SELECT *, 
     DecryptedPassword = Convert(varchar(32),
     DecryptByPassPhrase(@EncryptionKey, [Password])),
     [Password],
     DecryptedCode = Convert(varchar(32),
     DecryptByPassPhrase(@EncryptionKey, [BackupCode])),
     [BackupCode],
     FROM [Users]

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 2021-01-24
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2011-01-10
    • 2011-05-06
    相关资源
    最近更新 更多