我有一个 rar 文件,它是文件的集合。我已经使用 python 代码在 rar 文件上生成了 MD5 校验和,如下所示,然后假设 rar 文件生成的 md5 是 XXX。当我刚刚提取 rar 文件(没有修改/添加文件)并再次创建 rar 文件时,我观察到校验和已更改(除 XXX 之外)。
import hashlib
hashlib.md5("filename.rar").hexdigest()
Run Code Online (Sandbox Code Playgroud)
有没有像 CRC、校验和、SHA1 等算法,即使文件日期/时间发生变化并且文件的实际内容没有变化,计算出的校验和仍然相同?
我正在迭代一组32位十六进制字符串("DEADBEEF","12345678"等),我试图将它们加在一起形成一个32位校验和.假设变量$temp
在下面的示例中加载了一些十六进制字符串.
my $temp;
my $checksum;
for (...)
{
#assume $temp is loaded with a new hex string here
my $tempNum = hex ($temp);
$checksum += $tempNum;
$checksum &= 0xFFFFFFFF;
print printf("checksum: %08X",$checksum);
}
Run Code Online (Sandbox Code Playgroud)
前几个值是"7800798C","44444444"和"44444444".输出是:
校验和:7800798C
校验和:BC44BDD0
校验和:FFFFFFFF
校验和:FFFFFFFF
等等..
你可以看到前两个总结是正确的,然后它似乎饱和.我错过了关于Perl变量大小限制的内容吗?
编辑:这是脚本的实际输出(字符串是十六进制字符串,值是该字符串的十进制转换,校验和是结果输出):
string: 7800798C, value: 2013297036, checksum 7800798C string: 44444444, value: 1145324612, checksum BC44BDD0 string: 44444444, value: 1145324612, checksum FFFFFFFF string: 44444444, value: 1145324612, checksum FFFFFFFF string: 78007980, value: 2013297024, checksum FFFFFFFF string: 44444444, value: 1145324612, checksum FFFFFFFF
有谁知道以下函数中使用的校验和算法的正式/官方名称?
function Checksum($number, $encode = true)
{
if ($encode === true)
{
$result = 0;
$number = str_split($number, 1);
foreach ($number as $value)
{
$result = ($result + ord($value) - 48) * 10 % 97;
}
return implode('', $number) . sprintf('%02u', (98 - $result * 10 % 97) % 97);
}
else if ($number === Checksum(substr($number, 0, -2), true))
{
return substr($number, 0, -2);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
function ifMB($entity, $reference, $amount = 0.00)
{
$stack = 923;
$weights = …
Run Code Online (Sandbox Code Playgroud) 有人可以解释如何使用8位二进制加法计算校验和吗?这是文档的摘录:
这是消息的一般形式:
STX | TYPE | FS | DATA | FS | CHK | ETX
Run Code Online (Sandbox Code Playgroud)
STX是HEX 02
ETX是HEX 03
FS是HEX 15
"类型"是唯一的1字节消息标识符(例如,用于轮询消息的"P")."数据"包含可打印的ASCII字符.
校验
校验和是根据所有字符计算的,包括和<FS>
之间的所有字符.校验和通过所有包含字符的8位二进制加法计算,其中第8个或奇偶校验位假定为零.超过第8位的数据丢失了.8位结果转换为两个可打印的ASCII十六进制字符,范围从00到FF,然后插入到数据流中.十六进制字符AF是大写的.接收设备重新计算缓冲消息的校验和,并将其与收到的校验和进行比较.比较是后续确认()或传输的否定确认()的基础.<STX>
<CHK>
<CHK>
<ACK>
<NAK>
以太网帧校验序列始终附加到数据链路层中帧的末尾.为什么它被附加到帧的末尾而不是其他地方?
我考虑过它并认为它可能与如何计算CRC校验和有关,如果帧的结构是头+有效载荷+ crc而不是header + crc + payload,则更容易由硬件执行.
CRC执行形式(数据+填充)/除数的XOR除法,对于最终帧,填充由余数替换.接收器然后计算(数据+余数)/除数,并在结果为0时接受帧.
我用来将文件转换为字符串然后转换为mdf的函数如下所示.我正在输出文件路径和文件名,以确保一切都很酷.有什么我不考虑可以改变文件(实际上是视频mp4)的指纹吗?我在ubuntu上对md5sum进行检查.
private static String readFileToString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(
new FileReader(filePath));
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
System.out.println(fileData.toString());
return fileData.toString();
}
public static String getMD5EncryptedString(String encTarget){
MessageDigest mdEnc = null;
try {
mdEnc = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
System.out.println("Exception while encrypting to md5");
e.printStackTrace();
} // Encryption algorithm
mdEnc.update(encTarget.getBytes(), 0, encTarget.length());
String …
Run Code Online (Sandbox Code Playgroud) 我遇到的问题是,示例程序生成的tcp校验和(下面复制)与wireshark计算的校验和不匹配.有人可以指出我哪里出错了.在这里我尝试了两种方法
使用这两个值,得到两个不同的值,两者都不匹配wireshark值.
我在这里复制IP和TCP标头的详细信息.
IP标头:
0000 60 00 00 00 00 2a 06 80 10 80 a2 b1 00 00 00 00
0010 00 00 00 00 00 1e 00 00 ff 00 00 00 00 00 00 00
0020 00 00 00 00 00 00 00 24
TCP标头:
0000 04 22 00 50 00 01 e0 dd 00 01 42 74 50 14 22 38
0010 eb 10 00 00
我的理解是,添加psuedo头和TCP头值将给出校验和.手动添加值会给出完全不同的值.以编程方式,当我尝试时,它是(38 eb).wireshark显示正确的值应为0xb348
我在哪里做错了?有人可以建议我如何手动完成?
#include <stdio.h>
#include <stdlib.h> …
Run Code Online (Sandbox Code Playgroud) 我需要为超过1GB的文件计算sha256校验和(通过块读取文件),目前我正在使用python:
import hashlib
import time
start_time = time.time()
def sha256sum(filename="big.txt", block_size=2 ** 13):
sha = hashlib.sha256()
with open(filename, 'rb') as f:
for chunk in iter(lambda: f.read(block_size), b''):
sha.update(chunk)
return sha.hexdigest()
input_file = '/tmp/1GB.raw'
print 'checksum is: %s\n' % sha256sum(input_file)
print 'Elapsed time: %s' % str(time.time() - start_time)
Run Code Online (Sandbox Code Playgroud)
我想尝试golang认为我可以获得更快的结果,但在尝试下面的代码后,它运行慢了几秒钟:
package main
import (
"crypto/sha256"
"fmt"
"io"
"math"
"os"
"time"
)
const fileChunk = 8192
func File(file string) string {
fh, err := os.Open(file)
if err != nil {
panic(err.Error()) …
Run Code Online (Sandbox Code Playgroud) 是否可以选择表中的整行并获得某种校验和?我正在寻找一种方法,告诉我的代码仅在更改了至少一条记录后才更新数据。从数据更改跟踪的角度来看,这将有助于我减少历史记录表中记录的许多更改。- 谢谢。
我想在上传之前在浏览器端对文件进行校验和,然后在服务器端进行校验和比较,以确保一致性。但是,如何获取文件的纯二进制数据并对其进行校验和?我尝试了下面的方法,但是不起作用:
let fileSelect = document.getElementById('file')
let files = fileSelect.files
let file = files[0]
var r = new FileReader();
r.onload = function(){ console.log(r.result); };
r.readAsArrayBuffer(file);
var file_sha1 = sha1(r.result)
Run Code Online (Sandbox Code Playgroud)