商业案例是。
1) 用户在纸上打印文档
2) 用户将打印的纸带给老板,老板在纸上唱歌
3) 然后用户去管理员那里对该纸进行数字签名。
我的任务是帮助管理员以简单的方式确保纸质文档和数字文档之间没有变化。
文档写在三个sql表中。
第一个表的完整性是字符串+日期
第二个表的完整性是组合 int+float
第三个表的完整性是 int+string。
这些表中还有其他列,可以在Boss sing document后自由更新,不需要Boss sing。
我的想法是从这三个表/组合中生成某种 SHA 或 CheckSum。在文档没有更改的情况下,这将是相同的。
我不希望我的校验和是无限的或太长,以便管理员可以轻松检查是否违反了我的自定义完整性。
我开始考虑我可以为 int - float make sum(int * folat)
对于每个字母的字符串我可以使用 ASCII 数字并做 sum(int * (ascii(S)+ascii(T)+ascii(I)+ascii (N)+ascii(G)))。
对于 date - int same make int * (date to int) 之后我可以将这三个数字相加(求和)并转换为十六进制。但也许我的数字将超出范围或太大而无法通过人眼进行比较。
我如何缩小超大数字以方便人类阅读和比较?有没有另一种方法可以确保我的受保护列在一段时间内没有变化?
我正在使用 MSSQL2005/8 服务器。我的报告引擎大部分是 rime SqlReportingServices,但我更喜欢在数据库级别而不是报告级别执行此登录。
我不想锁定文档的编辑,因为有时 Boss 会要求用户在签名前返回并更正文档。
我也不能逼老板拿鼠标在手。
您可以只使用 CHECKSUM 函数,因为它返回一个 INT。只需输入您要针对这些表进行校验和的列,它就会输出这些列的校验和值。这是 AdventureWorks2012 中的示例,但此功能已经存在了很长一段时间。在这种情况下,我从两个表中获取列作为单个校验和函数调用的一部分。