友
我想在SQL SERVER(我在这里找到http://msdn.microsoft.com/en-us/library/ms190357.aspx)中使用EncryptByPassPhrase
来通过加密来更新表中的现有值。但是,密码(或密钥)以字节为单位,例如:
private static readonly byte[] TrippleDesKey = new byte[] { 0xF1, 0x07, 0xE6, 0x13, 0xBA, 0x85, 0x7F, 0xDC, 0x6D, 0x85, 0x67, 0x9B, 0x68, 0x7A, 0xC7, 0x1F, 0x10, 0xBA, 0xB0, 0x2F, 0xA2, 0xAE, 0xDA, 0xEA };
我想使用EncryptByPassPhrase
变量应用TrippleDesKey
。
有关我如何做到这一点的任何建议?我假设如果我将TrippleDesKey
变量转换为字符串,我可以简单地使用它EncryptByPassPhrase
。
我尝试转换TrippleDesKey
变量,例如
string result = System.Text.Encoding.UTF8.GetString(TrippleDesKey);
Console.WriteLine(result);
并且ouptut是�����m�g�hz���/����
我在EncryptByPassPhrase中使用了�����ï�g�hz���/����但没有加密值,即返回空字符串
答案 0 :(得分:0)
EncryptByPassPhrase可以接受二进制(字节)值作为密码,因此您应该能够将TrippleDesKey作为参数传递给存储过程或语句。我把它扔在一起作为一个例子,但它应该很接近......
string commandText = "UPDATE MyTable SET EncryptedData = EncryptByPassPhrase(@DesKey, EncryptedData ) WHERE CustomerID = @ID";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@DesKey", SqlDbType.VarBinary);
command.Parameters["@DesKey"].Value = TrippleDesKey;
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
答案 1 :(得分:0)
您只需将字节十六进制值加入一个值并使用它:
new byte[] { 0xF1, 0x07, 0xE6, 0x13, 0xBA, 0x85, 0x7F, 0xDC, 0x6D, 0x85, 0x67, 0x9B, 0x68, 0x7A, 0xC7, 0x1F, 0x10, 0xBA, 0xB0, 0x2F, 0xA2, 0xAE, 0xDA, 0xEA } = 0xF107E613BA857FDC6D85679B687AC71F10BAB02FA2AEDAEA
然后像这样使用它:
EncryptByPassPhrase( 0xF107E613BA857FDC6D85679B687AC71F10BAB02FA2AEDAEA, 'test')