我正在搜索是否可以构建相同的Linux Kerneltwice(相同的源,相同的环境,相同的选项,相同的编译器)并获得相同的校验和.谁知道怎么做?
如何在没有元数据的情况下创建仅媒体数据的校验和,以获得媒体文件的稳定标识.优选地是具有支持多种格式的库的跨平台方法.例如vlc,ffmpeg或mplayer.
(媒体文件应该是普通格式的音频和视频,图像也很好)
我想在C#中实现这个
我看过这里:http: //www.codeproject.com/KB/cpp/PEChecksum.aspx
并且我知道ImageHlp.dll MapFileAndCheckSum函数.
但是,出于各种原因,我想自己实现.
我找到的最好的是:http: //forum.sysinternals.com/optional-header-checksum-calculation_topic24214.html
但是,我不明白这个解释.任何人都可以澄清如何计算校验和吗?
谢谢!
更新
我从代码示例中,我不明白这意味着什么,以及如何将其转换为C#
sum -= sum < low 16 bits of CheckSum in file // 16-bit borrow
sum -= low 16 bits of CheckSum in file
sum -= sum < high 16 bits of CheckSum in file
sum -= high 16 bits of CheckSum in file
Run Code Online (Sandbox Code Playgroud)
更新#2
谢谢,遇到了一些Python代码,不会太相似这里
def generate_checksum(self):
# This will make sure that the data representing the PE image
# is updated with …
Run Code Online (Sandbox Code Playgroud) 当raw sockets
用于发送TCP
数据时,允许保留source ip address
零,以便内核输入正确的值.这很有用,尤其IP
是在使用多个接口(具有不同地址)时.
我现在的问题是:要计算TCP
校验和,我需要知道源IP地址到底是什么.这对我来说似乎不可能?
无论如何确定IP
我的传出数据包的来源?
(另一种方法是,将我的原始套接字专门绑定到一个地址,但我宁愿不想这样做).
/编辑:使用Linux
我正在构建一个Web工具来检查提交的内容是从Web获取还是提交者自己的工作.抄袭探测器.
我有一些想法,我可以生成校验和,并将其用作与其他条目进行比较的关键.但是,如果有人做了一些小的更改,比如包括/删除注释,更改变量/函数名等等,那么校验和将会有所不同,所以这种方法不起作用.
有什么更好的方法吗?
我正在使用Python 2.7.6中的lzma模块进行实验,以查看是否可以为将来的项目使用XZ格式创建压缩文件。我在实验期间使用的代码是:
import lzma as xz
in_file = open('/home/ki2ne/Desktop/song.wav', 'rb')
input_data = in_file.read()
compressed_data = xz.compress(input_data)
out_file = open('/home/ki2ne/Desktop/song.wav.xz', 'wb')
in_file.close()
out_file.close()
Run Code Online (Sandbox Code Playgroud)
与使用普通xz时相比,我注意到生成的文件中有两个不同的校验和(MD5和SHA256)(尽管我可以用两种方法解压缩-两个文件的解压缩版本的校验和都相同)。这会是个问题吗?
更新:我找到了一个修复程序,方法是通过peterjc的Git存储库(从此处链接)安装backport(来自Python 3.3 ),现在它显示的校验和相同。不确定是否有帮助,但是我确保未安装存储库中的LZMA Python模块,以避免可能的名称冲突。
这是我的测试代码以确认这一点:
# I have created two identical text files with some random phrases
from subprocess import call
from hashlib import sha256
from backports import lzma as xz
f2 = open("test2.txt" , 'rb')
f2_buf = buffer(f2.read())
call(["xz", "test1.txt"])
f2_xzbuf = buffer(xz.compress(f2_buf))
f1 = open("test1.txt.xz", 'rb')
f1_xzbuf = buffer(f1.read())
f1.close(); f2.close()
f1sum …
Run Code Online (Sandbox Code Playgroud) 根据我对UDP的了解,它没有错误处理,没有检查发送/接收的数据序列,没有检查重复的数据包,没有检查损坏的数据包以及显然不能保证已接收发送的数据包。 。
因此,考虑到这一点,为什么实际上在UDP中存在使用校验和的选项?因为可以肯定的是,如果您要确保以正确的顺序接收发送的数据(而不损坏等),则可以使用TCP ...
谢谢你的时间 :)
我需要为SFTP执行校验和(用于数据完整性).我希望这可以在SFTP文件传输期间完成 - 我意识到这可能是产品依赖的(仅供参考:使用CLEO VLTrader),但是想知道这是否习惯?
我也在寻找与使用校验和算法一样好(或更好)的替代数据完整性检查选项.谢谢!
以前我问了一个关于组合SHA1 + MD5 的问题,但之后我理解计算SHA1然后延迟文件的MD5并不比SHA256快.在我的情况下,4.6 GB文件大约需要10分钟,在Linux系统中使用默认实现SHA256和(C#MONO).
public static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我读了这个主题,并以某种方式根据他们所说的改变我的代码:
public static string GetChecksumBuffered(Stream stream)
{
using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(bufferedStream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有这样的感情,需要大约9分钟.
然后我尝试通过sha256sum
Linux中的命令测试我的文件中的相同文件,它需要大约28秒,上面的代码和Linux命令都给出相同的结果!
有人建议我阅读Hash Code和Checksum之间的区别,然后我会谈到这个解释差异的主题.
我的问题是:
是什么导致上述代码和Linux之间的这种不同sha256sum
? …