首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建非对称密钥'+@MANV+‘

创建非对称密钥'+@MANV+‘
EN

Stack Overflow用户
提问于 2020-09-19 19:11:12
回答 2查看 98关注 0票数 0
代码语言:javascript
复制
    CREATE PROC [dbo].[SP_INS_PUBLIC_NHANVIEN](@MANV varchar(20), @HOTEN nvarchar(100), @EMAIL varchar(20), @LUONGCB nvarchar(100), 
@TENDN nvarchar(100), @MK nvarchar(20))
AS

BEGIN

DECLARE @C NVARCHAR(MAX) 
SET @C = 
    'CREATE ASYMMETRIC KEY '+@MANV+'
     WITH ALGORITHM = RSA_512
     ENCRYPTION BY PASSWORD = '+@MK+''

EXEC(@C)

INSERT INTO NHANVIEN (MANV, HOTEN, EMAIL, LUONG, TENDN, MATKHAU, PUBKEY) 
VALUES (@MANV, @HOTEN, @EMAIL, ENCRYPTBYASYMKEY(ASYMKEY_ID(@MANV),@LUONGCB), @TENDN, HASHBYTES('SHA1', @MK), @MANV)

END;

当我使用这个存储过程时,LUONG的值是NULL。有什么问题吗?

它不会在文件非对称密钥中创建RSA,这意味着创建非对称密钥不起作用。为什么?

EN

回答 2

Stack Overflow用户

发布于 2020-09-20 02:31:11

..feel可以自由改进..

代码语言:javascript
复制
--drop asymmetric key [myasymmetrickey];
--go


--key
declare @asymkeyname sysname, @asymkeypassword nvarchar(128);
-- encryptme
declare @encryptme nvarchar(30) /*better make it 26 if nvarchar or 53 if varchar*/;

select @asymkeyname = N'myasymmetrickey', @asymkeypassword = N'123456?';
select @encryptme = N'encrypt:53byte=max26nchars'; --rsa_512 can encrypt max 53bytes..if datalength(string) > 53 then encrypresult=null

begin
    declare @sql nvarchar(500);

    if nullif(@asymkeyname, '') is null 
    begin
        raiserror('no key name!', 16, 1);
        return; -- -1
    end


    if asymkey_id(@asymkeyname) is null 
    begin 

        if len(isnull(@asymkeypassword, N'') < 6)
        begin
            raiserror('password too short!', 16, 1);
            return; -- -1
        end
        
        begin try
            select @sql = N'CREATE ASYMMETRIC KEY '+QUOTENAME(@asymkeyname)+N' WITH ALGORITHM = RSA_512 ENCRYPTION BY PASSWORD = ''' + replace(@asymkeypassword, '''', '''''') + N'''';
            exec (@sql)
        end try
        begin catch
            select error_message() as error;
            return -- -1
        end catch
    end

    select 
        encryptbyasymkey(asymkey_id(@asymkeyname),@encryptme) as binaryencrypted, 
        hashbytes('SHA1', @asymkeypassword) as asymkeypasswordhashed;
end
票数 0
EN

Stack Overflow用户

发布于 2020-09-21 10:13:00

试试这个:

代码语言:javascript
复制
CREATE Proc sp_Ins_Public_NHANVIEN (
            @manv    sysname,       @hoten nvarchar(100), @email varchar(20),
            @luongcb nvarchar(100), @tendn nvarchar(100), @mk   nvarchar(20)) as
begin
    declare @c nvarchar(MAX)

    if Asymkey_Id(@manv) is null
    begin
        set @c = 'CREATE ASYMMETRIC KEY '    + quoteName(@manv) + ' ' +
                 'WITH ALGORITHM = RSA_512 ' + 
                 'ENCRYPTION BY PASSWORD = ' + quoteName(@mk , nchar(39))
        exec (@c)
    end

    insert into NHANVIEN (MANV, HOTEN, EMAIL, LUONG, TENDN, MATKHAU, PUBKEY)
    values (@manv, @hoten, @email,
            EncryptByAsymKey(Asymkey_Id(@manv), @luongcb),
            @tendn, hashBytes('SHA1', @mk), 
            (select convert(nvarchar(256), public_key, 2)
               from sys.asymmetric_keys where name = @manv)
            )
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63968081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档