请教:SQL Server加密解密word文档时候的问题

msnsnd msnsnd 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
word文档作为二进制流的形式存到存储过程里面
SqlParameter nameParam = firstCommand.Parameters.Add("@word",System.Data.SqlDbType.VarBinary);
nameParam.Value = wordData;//wordData为byte[]

在加密的存储过程中

CREATE PROCEDURE Encrypt
@word varbinary(max)
AS
BEGIN

EXECUTE AS LOGIN = 'Mickey'
OPEN SYMMETRIC KEY User1SymmetricKeyCert
DECRYPTION BY CERTIFICATE cert_mickey

INSERT INTO PTDG (word) values(EncryptByKey(Key_GUID('User1SymmetricKeyCert'),@word))

CLOSE SYMMETRIC KEY User1SymmetricKeyCert
RETURN
END
这样进行加密
然后解密的存储过程如下
CREATE PROCEDURE DECRYPT
AS
BEGIN
EXECUTE AS LOGIN = 'Mickey'
OPEN SYMMETRIC KEY User1SymmetricKeyCert DECRYPTION BY CERTIFICATE cert_mick
SELECT CONVERT(varbinary, DecryptByKey(word)) AS newWord FROM PTDG WHERE scope=2

CLOSE ALL SYMMETRIC KEYS
REVERT
END
GO
然后我调用解密存储过程生成新的word文档
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=new SqlCommand("DECRYPT",conn);
da.SelectCommand.CommandType=CommandType.StoredProcedure;

DataSet ds=new DataSet();
da.Fill(ds);

DataTable table =ds.Tables[0];

foreach(DataRow dr in table.Rows)
{
byte[] outbyte = (byte[])dr["word"];

fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
bw = new BinaryWriter(fs);

bw.Write(outbyte);
bw.Flush();


bw.Close();
fs.Close();
}



但是生成的word文档不对,打开时候要选择编码,而且里面是空的
不知道那里出了错误,大家帮忙来看看,谢谢了。
...全文
评论 3
收藏 已收藏
分享
返回顶部
msnsnd
疑难问题 22,298 成员 121,727 内容