标签归档:sql加密

mssql sqlserver MD5和SHA1加密算法应用举例说明


摘要:
下文讲述使用sql脚本对指定字符处MD5和SHA1加密简介,如下所示:
实验环境:sql server 2008 R2


SHA1和MD5是一个不可逆的加密算法,常用于用户密码保存。
通常我们会在应用程序的后台中对字符串进行加密后,然后放入数据库中存储,下文讲述另一种方法,在数据库中,直接使用sql脚本生成相应的加密字符串

sqlserver中加密需使用 hashbytes 函数,然后再使用 sys.fn_varBinToHexStr将二进制信息转换为字符串

例:
对maomao365字符串执行MD5和SHA1加密,并输出加密后的字符串,如下:

     
  select sys.fn_VarBinToHexStr(hashbytes('MD5','maomao365'))
  select sys.fn_VarBinToHexStr(hashbytes('SHA1','maomao365'))
 
 

mssql sqlserver 修改非对称密钥相关属性的方法分享


摘要:
下文讲述使用关键字Alter ASYMMETRIC KEY 关键字修改非对称密钥属性的方法分享,如下所示:
实验环境:sqlserver 2008 R2



ALTER ASYMMETRIC KEY 关键字简介

ALTER ASYMMETRIC KEY 关键字功能:
修改非对称加密的相关属性

ALTER ASYMMETRIC KEY 关键字语法说明:

ALTER ASYMMETRIC KEY Asym_Key_Name

::= | REMOVE PRIVATE KEY

::=
WITH PRIVATE KEY ( [ , ] )

::=
ENCRYPTION BY PASSWORD = ‘strongPassword’
| DECRYPTION BY PASSWORD = ‘oldPassword’
——-参数说明——
Asym_Key_Name:
非对称密钥定义时所使用的 密钥名称
REMOVE PRIVATE KEY
将非对称密钥中的私钥删除,保留公钥。
WITH PRIVATE KEY
修改私钥保护方式
ENCRYPTION BY PASSWORD =’strongPassword’
修改私钥所对应的新密码,输入的密码必须符合windows的密码策略。
DECRYPTION BY PASSWORD =’oldPassword’
私钥所对应的旧密码



ALTER ASYMMETRIC KEY 关键字举例应用

例1:
修改私钥密码

     
ALTER ASYMMETRIC KEY testKey    
    WITH PRIVATE KEY (  
    DECRYPTION BY PASSWORD = '',  
    ENCRYPTION BY PASSWORD = '');  
GO 


ALTER ASYMMETRIC KEY testKey    
    WITH PRIVATE KEY (  
    DECRYPTION BY PASSWORD = 'abcwewe_AL',  
    ENCRYPTION BY PASSWORD = 'abcwewe_AL123');  
GO 
  

例2:
删除非对称密钥testKey中的私钥,保留公钥

    ALTER ASYMMETRIC KEY testKey REMOVE PRIVATE KEY;  
     GO  

例3:
从私钥中删除密码保护

    OPEN MASTER KEY;  
      ALTER ASYMMETRIC KEY PacificSales09 WITH PRIVATE KEY (  
       DECRYPTION BY PASSWORD = '' );  
     GO
	 


OPEN MASTER KEY;  
      ALTER ASYMMETRIC KEY PacificSales09 WITH PRIVATE KEY (  
       DECRYPTION BY PASSWORD = 'abcwewe_AL123' );  
     GO
 

mssql sqlserver 创建非对称加密密钥的方法分享


摘要:
下文讲述使用sql脚本创建非对称密钥的方法
实验环境:sqlserver 2008 R2


在sqlserver中创建非对称的密钥,我们需采用create asymmetric key 系统函数创建密钥。

CREATE ASYMMETRIC KEY 语法说明:

CREATE ASYMMETRIC KEY Asym_Key_Name
[ AUTHORIZATION database_principal_name ]
[ FROM ]
[ WITH ]
[ ENCRYPTION BY ]
[ ; ]
::=
FILE = ‘path_to_strong-name_file’
| EXECUTABLE FILE = ‘path_to_executable_file’
| ASSEMBLY Assembly_Name
| PROVIDER Provider_Name

::=
ALGORITHM =
|
PROVIDER_KEY_NAME = ‘key_name_in_provider’
|
CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

::=
{ RSA_4096 | RSA_3072 | RSA_2048 | RSA_1024 | RSA_512 }

::=
PASSWORD = ‘password’
—参数说明——
FROM Asym_Key_Source
指定从中加载非对称密钥对的源。
AUTHORIZATION database_principal_name
指定非对称密钥的所有者。 所有者不能是角色或组。缺省值为当前用户。
FILE =’path_to_strong-name_file’
指定从中加载密钥对的强名称文件所在的路径。

备注

此选项在包含数据库中不可用。
EXECUTABLE FILE =’path_to_executable_file’
指定从中加载公钥的程序集文件。 由 MAX_PATH 根据 Windows API 限制为 260 个字符。
ASSEMBLY Assembly_Name
指定从中加载公钥的程序集的名称。
ENCRYPTION BY 指定密钥的加密方式。 可以为证书、密码或非对称密钥。
KEY_NAME =’key_name_in_provider’
指定来自外部提供程序的密钥名称。
CREATION_DISPOSITION = CREATE_NEW
在可扩展的密钥管理设备上创建新密钥。 PROV_KEY_NAME 必须用于指定设备上的密钥名称。 如果密钥已存在于设备上,此语句将失败,并显示错误。
CREATION_DISPOSITION = OPEN_EXISTING
将 SQL Server 非对称密钥映射到现有可扩展的密钥管理密钥。 PROV_KEY_NAME 必须用于指定设备上的密钥名称。 如果未提供 CREATION_DISPOSITION = OPEN_EXISTING,则默认值为 CREATE_NEW。
ALGORITHM =
可以提供五种算法;RSA_4096、RSA_3072、RSA_2048。
PASSWORD = ‘password’
指定用于对私钥进行加密的密码。 如果未提供该子句,则使用数据库主密钥对私钥进行加密。 password 最多为 128 个字符。 password 必须符合运行 SQL Server 实例的计算机的 Windows 密码策略要求。
备注说明:
“非对称密钥”是数据库级的安全对象实体。 该实体的默认格式包含公钥和私钥。 当未使用 FROM 子句执行时,CREATE ASYMMETRIC KEY 会生成新的密钥对。 当使用 FROM 子句执行时,CREATE ASYMMETRIC KEY 会从文件中导入密钥对,或从程序集中导入公钥。
默认情况下,私钥受数据库主密钥保护。 如果尚未创建任何数据库主密钥,则需要使用密码保护私钥。 如果不存在数据库主密钥,则可以选择性地使用密码。
私钥的长度可以为 512、1024 或 2048 位。


CREATE ASYMMETRIC KEY 创建举例:

例1:
采用 RSA_2048加密算法创建名称为 “testKey”的非对称密钥,并使用密码”abcwewe_AL”保护密钥

CREATE ASYMMETRIC KEY testKey   
    WITH ALGORITHM = RSA_2048   
    ENCRYPTION BY PASSWORD = 'abcwewe_AL';   
   go

例2:
从指定文件中创建密钥

CREATE ASYMMETRIC KEY testKey AUTHORIZATION sa   
    FROM FILE = 'D:\test\test20190418.tmp'    
    ENCRYPTION BY PASSWORD = 'abcwewe_AL';  
GO  

例3:
从 EKMProviderTest密钥管理器中的程序keyTest密钥生成相关密钥

CREATE ASYMMETRIC KEY testKey   
    FROM PROVIDER EKMProviderTest  
    WITH   
        ALGORITHM = RSA_2048,   
        CREATION_DISPOSITION = CREATE_NEW  
        , PROVIDER_KEY_NAME  = 'keyTest' ;  
GO