我必须在两台 Linux 服务器之间传输数百万个大小差异很大的文件,总计近 100 TB。第一次使用 rsync 很容易做到这一点,而且非常安全,因为可以对数据进行校验和。
但是,我需要保留文件列表及其校验和,以便将来定期进行一些检查。
有没有办法告诉 rsync 打印/记录文件的校验和?如果这不可行:考虑到性能非常重要,您会推荐哪种工具/命令?
提前致谢!
请问我根据ICMPv6协议计算16位校验和的方案是否正确。我尝试关注Wikipedia,但我不确定主要是关于两件事。
首先是什么the packet length
意思 - 它是没有校验和的整个 ICMPv6 数据包的数据包长度,还是只有有效载荷?它是像在 IPv6 中一样使用八位字节吗?这个 ICMPv6 回显请求的长度是多少?
6000 # beginning of IPv6 packet
0000 0000 3a00 FE80 0000 0000 0000 0202
B3FF FE1E 8329 FE80 0000 0000 0000 0202
B3FF FE1E 8330
8000 xxxx # this is beginning of the ICMP packet - type and checksum
a088 0000 0001 # from here including this line I compute the length
0203 0405 0607 0809 0a0b 0c0d 0e0f 1011
1213 1415 1617 1819 …
Run Code Online (Sandbox Code Playgroud) 我浏览了几个关于在 Python 中计算文件校验和的主题,但没有一个主题回答了关于多个文件中的一个总和的问题。我在子目录中有几个文件,想确定其中一个或多个文件是否有任何更改。有没有办法从多个文件中生成一个总和?
编辑:这是我获取总和列表的方式:
checksums = [(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in flist]
Run Code Online (Sandbox Code Playgroud) 当我下载时,说一个 ISO 映像,使用 torrent;我还应该验证文件的完整性(例如,通过计算 sha256 哈希),还是在下载时自动完成?
我正在为在 .NET 环境中用 C# 编写的基于 courier 的系统编写清单文件的校验和。我需要一个 8 位的字段来表示校验和,其计算方法如下:
记录校验和算法 形成以下乘积的 32 位算术和
• 记录中每个 ASCII 字符的 7 个低位
• 记录中每个字符的位置从 1 开始编号为第一个字符。对于记录的长度,但不包括校验和字段本身:
Sum = ?i ASCII( 记录中的第 i 个字符 ).( i ) 其中 i 在不包括校验和字段的记录长度上运行。
执行此计算后,将结果总和转换为二进制,并将总和的 32 个低位拆分为 8 个 4 位(八位字节)块。请注意,每个八位字节都有一个范围从 0 到 15 的十进制数值。
将 ASCII 0(零)的偏移量添加到每个八位字节以形成 ASCII 代码编号。
将 ASCII 代码编号转换为其等效的 ASCII 字符,从而形成 0123456789:;<=>? 范围内的可打印字符。
连接这些字符中的每一个以形成一个总长度为八 (8) 个字符的字符串。
我不是最擅长数学,所以我正在努力按照文档正确编写代码。到目前为止,我已经写了以下内容:
byte[] sumOfAscii = null;
for(int i = 1; i< recordCheckSum.Length; i++)
{
string indexChar = recordCheckSum.ElementAt(i).ToString();
byte[] …
Run Code Online (Sandbox Code Playgroud) 我正在寻找是否存在一种方法可以获取可以从 google bigquery 导出的文件(或表)的校验和。
假设我导出(或下载)了一个daily-record-2018-07-10
从 bigquery调用的文件的示例
,是否有一种方式 bigquery 可以为我们提供一些checksum
(例如sha1
,md5
等),以便我们可以在开始处理这些文件之前预先计算这些校验和
这样做的原因是为了确保我们在下载(或导出)表时不会丢失任何信息。我们确实在网络上丢失了一些信息,然后我们可以预先计算校验和并再次尝试导出表。
我想确定 ASCII 字符串的 8 位模 256 校验和。我知道公式是:
checksum = (sum of bytes)%256
我怎样才能在Python中做到这一点(操作字节)?如果我以字符串“1c03e8”开头,我应该输出0x94
. 主要问题是我不确定如何找到 ASCII 字符串的字节总和。这是我正在寻找的主要想法:
https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/
它有 CheckSum8 Modulo 256
我努力了:
component = ('1c03e8')
for i in range(len(component)):
checksum.append(int(float(component[i].encode("hex"))))
print checksum
print hex(int(sum(checksum)%256))
Run Code Online (Sandbox Code Playgroud)
这虽然给了我 0x52
在使用 GNU tar 1.30 的 SUSE Linux Enterprise Server 12 SP3 系统上打包文件夹总是会提供不同的 md5 校验和,尽管文件内容不会更改。
我运行 tar 来打包我的文件夹,其中包含一个简单的文本文件:
tar cf package.tar folder
Run Code Online (Sandbox Code Playgroud)
尽管如此,尽管内容完全相同,但生成的 tar 始终具有不同的 md5(或 sha1)校验和:
$> rm -rf package.tar && tar cf package.tar folder && md5sum package.tar
e6383218596fffe118758b46e0edad1d package.tar
$> rm -rf package.tar && tar cf package.tar folder && md5sum package.tar
1c5aa972e5bfa2ec78e63a9b3116e027 package.tar
Run Code Online (Sandbox Code Playgroud)
因为 linux 文件系统似乎以随机顺序将文件传送到 tar,所以我尝试使用该--sort
选项。但是生成的命令不会改变我的校验和问题。tar 的--mtime
选项在这里也无济于事,因为创建日期完全相同。
我很感激这方面的任何帮助。
我进行了更多探索以找出为什么从 ipv6 中删除校验和,但我无法得到确切的答案,IPv6 中的可变字段如何受到保护?
我正在用 Go 编写一个实用程序,可用于计算输入字符串的 CRC32 校验和。Java 中存在类似的实用程序,我们正在广泛使用它,并且一直运行良好。
Java 实用程序用于java.util.zip.CRC32
计算校验和。伪代码如下:
public static void main(String[] args) {
final Checksum checksum = new CRC32();
byte[] input1Bytes = "input1".getBytes(StandardCharsets.UTF_8);
checksum.update(input1Bytes, 0, input1Bytes.length);
final byte[] input2Bytes = "input2".getBytes(StandardCharsets.UTF_8);
checksum.update(input2Bytes, 0, input2Bytes.length);
final byte[] input3Bytes = "input3".getBytes(StandardCharsets.UTF_8);
checksum.update(input3Bytes, 0, input3Bytes.length);
System.out.println("Checksum in Java : " + checksum.getValue());
}
Run Code Online (Sandbox Code Playgroud)
Go中的实用程序使用Go SDK(版本1.13.6)包crc32
中的( )Go中生成校验和的伪代码如下:hash
import "hash/crc32"
table := crc32.MakeTable(0)
checksum := crc32.Checksum([]byte("input1"), table)
checksum = crc32.Update(checksum, table, []byte("input2"))
checksum = crc32.Update(checksum, table, []byte("input3"))
log.Printf("Checksum in …
Run Code Online (Sandbox Code Playgroud)