- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设计一个表,用于存储向客户收费的信息。
问题是数据库可能位于客户的服务器上。
我正在考虑添加包含第一个散列的第二个表,以便使用数据库的软件可以更新数据库和散列,但客户不能编辑(在我们不知道的情况下)包含收费信息的表(在他们无法生成正确哈希的基础)。
这是阻止客户篡改他们有权访问的表格的好方法吗?
我将如何创建表(可能不止一个表)中所有数据的散列?
具体来说,我需要对表中的数据进行哈希处理,而不是像数据集这样的对象(即,如果我们更改组件,我不希望所有的哈希值都发生变化)。
我正在考虑将数据写入一个文本文件并创建该文件的散列,但这会非常缓慢,因为该表可能包含多达 500,000 条记录,并且需要在每次更新时生成散列!
这个的实现可以在 delphi 或 c# 中。
最佳答案
哈希可以工作,但您还缺少另一个元素。为了生成无法重新生成的哈希值,那么您需要在哈希中包含一个 secret 值。 GUID 会起作用,但它实际上可以是您的客户不知道的任何值。当然,如果他们的计算机上有该软件,那么他们可以想象地发现算法和 secret 值,从而规避它。为每个客户使用不同的 secret 值将是一种很好的额外保护级别,以防万一被客户发现。
例子:
Hash([Table Data] + [Secret Value]) = [stored hash]
如果您只对表数据进行散列,那么他们可以简单地重新散列修改后的表数据,然后您就不会知道他们已经完成了。
就如何哈希整个表而不是每一行而言,大多数哈希都支持增量哈希。原因是如果您正在散列一个 10 GB 的文件,您可能没有足够的 RAM 将它全部加载到内存中进行处理。相反,您一次对一个 block 进行哈希处理,然后在完成后确定哈希。您可以对数据使用相同的方法。只需将每一行添加到散列中,一次一个,完成后完成散列。当然记得包括您的 key 值。
注意事项:
还要记住,大多数人都是诚实的,如果诚实的道路太痛苦(即测试中的误报,或者价格标签太贵),许多人只会求助于规避。会偷它反正不会付钱。今天可能偷窃的其他人明天可能会付出代价。您不想与您的客户争斗并将他们视为您的敌人,因为那样你们都会失败。
关于c# - 防篡改表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2357897/
我是Python和Golang开发人员,最近开始学习Rust。我当前的项目涉及处理数百个压缩日志文件,每个日志文件包含成千上万个JSON条目,每行一个JSON。我最初的尝试出奇的缓慢。通过调查,我注意
我在这里无法理解有关Rust闭包的概念。在我的代码中,默认值为i32。当我创建可变闭包时,它将采用文档中提到的可变引用。 当我在循环中调用inc闭包并尝试在循环内打印count的值时,我会得到可变的借
我是python的新手,并且在python中广泛使用了功能样式。 我正在尝试做的是接收一个字符串(切片)(或任何可迭代的)并使用对当前索引和下一个索引的引用进行迭代。这是我的尝试: fn main()
我通过RUST的性能购买了RUST,因此我决定将一个性能非常重要的项目从JAVA 11转换为Rust。 事实是,用JAVA性能编写的版本比单线程中的3倍要好得多,多线程中的+10倍要好得多 出于上下文
背景: 我正在编写rust的RDBMS db.catalog维护一个从table_id到table的哈希表: pub struct Catalog { table_id_table_map:
我的代码本身可以在文件中工作,但是每当我尝试运行RuSTLings quiz1.rs时,代码的测试部分都会出错。 // GOAL OF PROGRAM // Mary is buying apples
我很难理解Rust toml中的功能条目。 假设我有一个依赖项(在本例中为sqlx)说 sqlx = { version = "0.4.0-beta.1", default-features = fa
我的目标是 序列化(HashSet-> Vec) 并反序列化(&[u8]-> HashSet) uuid的哈希集。 我有以下序列化: fn serialize(set: HashSet) -> Vec
我是一名优秀的程序员,十分优秀!