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

msnsnd 2007-05-09 03:37:50
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文档不对,打开时候要选择编码,而且里面是空的
不知道那里出了错误,大家帮忙来看看,谢谢了。
...全文
257 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxsoft2007 2008-06-11
  • 打赏
  • 举报
回复
EncryptByKey

1.使用密钥加密的数据的变量:nvarchar、char、wchar、varchar 或 nchar

2.返回: varbinary,最大大小为 8000 个字节
tys101582 2007-05-10
  • 打赏
  • 举报
回复
难度挺大,不会,学习中,帮你顶上
肥胖的柠檬 2007-05-09
  • 打赏
  • 举报
回复
.............不会,学习

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧