什么是用于检测损坏的文件完整性检查(校验和)的最合适的哈希函数?
我需要考虑以下几点:
广泛的文件大小(1 kb到10GB +)
许多不同的文件类型
大量文件(+/- 100 TB和不断增长)
较大的文件是否需要更高的摘要大小(SHA-1与SHA 512)?
我看到SHA系列被称为加密哈希函数.它们是否不适合"通用"用途,例如检测文件损坏?像MD5或Tiger这样的东西会更好吗?
如果恶意篡改也是一个问题,你的答案会改变最合适的哈希函数吗?
外部库不是一个选项,只有Win XP SP3 +上可用.
当然,性能也值得关注.
(请原谅我的术语,如果不正确,我对这个问题的了解非常有限).
令我惊讶的是,我刚刚得知外键约束可能是不可信的.使用时添加约束时会发生这种情况WITH NOCHECK.当约束不受信任时,查询分析器不会将其用于查询计划生成.
请参阅:https:
//sqlserverfast.com/blog/hugo/2007/03/can-you-trust-your-constraints/
我的问题是这个.当一个约束是不可信的时,我可以检查的约束上有一个属性告诉我这个吗?我想我可以检查是否使用WITH NOCHECK添加约束,但是还有其他方法可以将约束标记为不可信吗?
我试图在其中散列大量具有二进制数据的文件,以便:(1)检查将来的损坏,以及(2)消除重复文件(可能具有完全不同的名称和其他元数据).
我知道md5和sha1及其亲属,但我的理解是这些是为安全而设计的,因此故意减慢以降低暴力攻击的效力.相比之下,我希望算法尽可能快地运行,同时尽可能减少冲突.
有什么建议?
我打开数据库文件并使用sqlite3的open()方法获取数据库连接,并且在程序退出之前连接不会关闭.如果发生意外错误,例如计算机突然断电或操作系统崩溃,数据库文件的模式是否会损坏,或者其句柄丢失?更具体地说,如果我重启计算机,它是否可以保持可写状态?顺便说一句,我不关心错误发生时的数据丢失.
非常感谢你!
这不是一个特定的问题,更多的是一般的疑惑.
当您必须以1:M关系对多个表进行删除时,最好是使用级联删除制作FK约束还是连接delete语句中的表.
我有一个旧项目,它有相关表的单独删除语句,有些语句没有执行,数据完整性受到损害.我不得不在两者之间做出决定,所以我想了一下什么是更好的解决方案.
还可以选择进行存储过程或事务.
所以我正在寻找意见或建议......?
我有以下(虚构)表:
?????????????????????? ??????????????????????
? Course ? ? Person ?
?????????????????????? ??????????????????????
? ID ? int ? ? ID ? int ?
? Name ? varchar(50) ? ? Name ? varchar(50) ?
?????????????????????? ??????????????????????
?????????????????????? ???????????????????????
? Occupation ? ? B_Occupation_Person ?
?????????????????????? ???????????????????????
? ID ? int ? ? Person_ID ? int ?
? Name ? varchar(50) ? ? Ocupation_ID ? int ?
?????????????????????? ???????????????????????
???????????????????
? B_Course_Person ?
???????????????????
? Course_ID ? int ?
? Person_ID ? int ? …Run Code Online (Sandbox Code Playgroud) 数据完整性检查是AWS Java SDK声称它默认提供的内容,客户端可以自己计算对象校验和,并在S3客户端中将其添加为标头"Headers.CONTENT_MD5",或者如果我们将其作为null传递或者不设置它,S3客户端在内部计算客户端本身的MD5校验和,它用它来比较从对象创建响应中获得的Etag((除了创建对象的MD5)以将错误返回到在数据完整性失败的情况下客户端.请注意,在这种情况下,完整性检查发生在客户端而不是S3服务器端,这意味着仍然会成功创建对象,客户端需要清理它明确.
因此,建议使用标头(检查发生在S3端本身并提前失败)但由于TransferManager使用部件上载,客户端无法为特定部件显式设置MD5.传输管理器应该负责计算部件的MD5并设置标头,但我不会在代码中看到这种情况.
由于我们希望使用Transfer Manager进行多部分上传,因此我们需要依赖于默认情况下启用的客户端检查.但是,也有一个警告.当我们在S3中的对象上启用SSE-KMS或SSE-C时,将跳过此数据完整性检查(正如它们在代码中的一个注释中所提到的那样),在这种情况下,接收到密文的MD5来自S3,无法通过在客户端计算的MD5进行验证.
我应该使用什么来启用S3中的SSE进行数据完整性检查?
注意:请验证上述理解是否正确.
我几乎完成了一个大型应用程序; 几天前,我看到Martin Fowler关于"NOSQL"的演讲.之后我意识到我一直在使用Mongo作为关系数据库,所以我决定重构我的模式.但是,我从一个来自"RDBMS"世界的人那里听到了很多关于诚信的内容; 我真的明白它有多重要,在"NOSQL"引擎中可以实现数据完整性吗?
更明确一点,这是一个简单的例子:
比方说,我有一个product,inventory在我的系统实体,
在我的inventory参考product_id中定义产品,
目前inventory我的mongo系列看起来像这样
{'inventory' :{'product_id' : '1', 'count' : 15}}
那么我可以inventory在我的系统中存储这样的东西:
{'inventory' :{'product' : {'id' : 1, 'name' : 'book'}, 'count' : 15}}
并且仍然可以实现数据完整性吗?如果我更改产品的名称_id : 1 中product的实体,然后发生什么事-我将循环更新所有的inventory收藏?
我们正在开发一个通过蓝牙使用 SPP(串行端口配置文件)的应用程序,开发人员正在讨论使用某种类型的协议和数据包传输,还是仅在没有任何形式的 ACK、序列或大小信息的情况下流式传输数据。
蓝牙是否提供有保证的传输和数据完整性,以便我们不需要数据包协议设计的开销?
我们可以仅依靠蓝牙来确保数据传输吗?
我已向现有数据库添加了一些新实体(表)。因此在数据库配置中配置了这些-
@Database(entities = {existingTable1.class, existingTable2.class, existingTable3.class, existingTable4.class,
newTable1.class, newTable2.class
}, version = 1, exportSchema = false)
Run Code Online (Sandbox Code Playgroud)
由于该应用程序处于开发阶段,我用来避免迁移。因此,我已从设备中卸载该应用程序并通过 Android Studio(运行)进行安装。但它给出了以下错误-
Room 无法验证数据完整性。您似乎已更改架构但忘记更新版本号。您可以通过增加版本号来简单地解决此问题。
在我的清单中,allowBackup 设置为 false,如下所示-
android:allowBackup="false"
Run Code Online (Sandbox Code Playgroud)
编辑
我有一件事要提。我在 asset 文件夹中有一个 sqlite 数据库文件。我只是在安装时将其复制到相应的应用程序数据库文件夹中。因此,当需要添加包含大量预填充数据的新表时,我只需更新 asset 文件夹中的 sqlite 数据库文件,然后调整相关实体并构建/运行项目。这样,它工作得很好,但这次却产生了这个问题。
data-integrity ×10
hash ×2
sql ×2
acid ×1
amazon-s3 ×1
android ×1
android-room ×1
aws-sdk ×1
bluetooth ×1
checksum ×1
corruption ×1
crash ×1
file ×1
mongodb ×1
mysql ×1
nosql ×1
protocols ×1
rdbms ×1
spp ×1
sql-server ×1
sqlite ×1
transmission ×1