请教:SQL Server加密解密word文档时候的问题
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文档不对,打开时候要选择编码,而且里面是空的
不知道那里出了错误,大家帮忙来看看,谢谢了。