【发布时间】:2013-06-02 06:00:14
【问题描述】:
我们在 SQL Server 表中有一个 varchar(25) 类型的列,该列错误地插入了应该使用 AES 加密的纯文本值。我们将从数据库中删除纯文本值。计划是验证字段的块大小,尽管这会导致留下一些未加密的值。我可以检查任何其他标准来可靠地识别有效的加密数据吗?
我们需要它是一个仅限 T-SQL 的解决方案。
更新
稍微深入一点,它从网络服务中获取值。此 Web 服务使用 ASP.Net 中的 AES 对它们进行加密。它获取返回的字节数组,然后使用此方法将字节数组转换为字符串:
static public string ByteArrToString(byte[] byteArr)
{
byte val;
string tempStr = "";
for (int i = 0; i <= byteArr.GetUpperBound(0); i++)
{
val = byteArr[i];
if (val < (byte)10)
tempStr += "00" + val.ToString();
else if (val < (byte)100)
tempStr += "0" + val.ToString();
else
tempStr += val.ToString();
}
return tempStr;
}
为了清楚起见,我应该说我最初并没有编写这段代码!
干杯
【问题讨论】:
-
你是如何加密被加密的数据的?如果使用 SQL 原生函数(例如 encryptbykey)完成,则密钥将与数据 iirc 一起存储。但是,varchar(25) 的列很奇怪...
-
加密数据通常不能存储为字符串,除非或直到发生了一些额外的编码(例如 base-64)。那么,本例中使用的是什么编码?
-
用更多信息更新了问题。
-
我不知道 SQL 服务器如何加密数据,但是当字节被转换为范围从
"000"和"255"(字符串中的十进制,大端编码)的值时,留下了 @ 987654325@ 字节的数据。这不是很多,甚至比单个 AES 块还要小。
标签: sql sql-server sql-server-2008 encryption aes