从Internet下载各种可执行文件或zip文件时,我从未使用过校验和.我知道它用于检查一致性并增加一些安全性.但是,当您从像Apache或Microsoft这样受人尊敬的项目下载时,它是否有必要.我们中有多少人实际使用校验和或哈希码来验证内容?
仅供参考,如果我偏离了StackOverflow可接受的内容,请告诉我.
我需要在Java中为XML文件创建校验和.基本要求是:
任何人都可以提供任何提示或示例代码?
谢谢,马克
当我最近将最新版本的R下载到新的MacBook Pro时,位于加州大学伯克利分校的CRAN CRAN的网页上说"检查下载图像的MD5校验和,以确保它没有被篡改或损坏镜像过程."
它说,"例如,在终端应用程序中键入md5 R-2.13.0.pkg以打印R-2.13.0.pkg映像的MD5校验和."
我在2011年6月27日从http://cran.cnr.berkeley.edu/复制的引文中的文字.
假设你有一个相当大的(对于"大"的本地定义),但相对稳定的表.
现在,我想要对整个表的某些内容(任何类型)进行校验和.
天真的方法可能是遍历整个表,采用每行上每列连接的校验和(比方说,MD5),然后将它们连接起来并取其MD5sum.
从客户端开始,可以通过逐步将列的值附加到MD5求和例程中来逐步优化,逐步改变该值.
原因是,在将来的某个时刻,我们希望重新连接到数据库,并确保没有其他用户可能改变了表:包括INSERT,UPDATE和DELETE.
有没有更好的方法来确定特定表是否发生了任何更改?还是更有效/更快的方式?
更新/澄清:
(这适用于Postgres,如果它有帮助的话.我宁愿避免戳交易期刊或类似的东西,但如果有办法这样做,我不反对这个想法.)
我正在尝试计算GS1校验位,并提出以下代码.计算校验位的算法是:
这听起来很简单,但我提出的解决方案似乎有点不雅.它确实有效,但我想知道是否有更优雅的方式来写这个.
(defn abs "(abs n) is the absolute value of n" [n]
(cond
(not (number? n)) (throw (IllegalArgumentException.
"abs requires a number"))
(neg? n) (- n)
:else n))
(defn sum-seq "adds (first number times 3) with (second number)"
[coll]
(+
(* (first coll) 3)
(second coll)))
(defn sum-digit
[s]
(reduce +
(map sum-seq
(partition 2 2 '(0)
(map #(Integer/parseInt %)
(drop 2 (clojure.string/split (clojure.string/reverse s) #"")))))))
(defn mod-higher10 "Subtracts the sum from nearest …
Run Code Online (Sandbox Code Playgroud) 我们被要求在下载页面上提供文件校验和.
无论如何,我们正在开发的门户网站采用HTTPS进行3因素身份验证.
校验和是否添加了任何安全性或者它是无用的?
我正在尝试创建文件的校验和,并将校验和保存为相同的文件.所以我监视文件,如果校验和发生变化,那么就做一些事情.
这是校验和
对于test.txt
contents: a
checksum: dd18bf3a8e0a2a3e53e2661c7fb53534
Run Code Online (Sandbox Code Playgroud)
我编辑文件:
contents: aa
checksum: dd18bf3a8e0a2a3e53e2661c7fb53534
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
python -c 'import hashlib;print hashlib.md5("test.txt").hexdigest()'
Run Code Online (Sandbox Code Playgroud)
为什么校验和是一样的?
我需要为输入流(或文件)计算校验和,以检查文件内容是否已更改.我有以下代码,虽然我使用相同的流,但每次执行都会生成不同的值.有人可以帮我这么做吗?
public class CreateChecksum {
public static void main(String args[]) {
String test = "Hello world";
ByteArrayInputStream bis = new ByteArrayInputStream(test.getBytes());
System.out.println("MD5 checksum for file using Java : " + checkSum(bis));
System.out.println("MD5 checksum for file using Java : " + checkSum(bis));
}
public static String checkSum(InputStream fis){
String checksum = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
//Using MessageDigest update() method to provide input
byte[] buffer = new byte[8192];
int numOfBytesRead;
while( (numOfBytesRead = fis.read(buffer)) > 0){
md.update(buffer, 0, numOfBytesRead); …
Run Code Online (Sandbox Code Playgroud) 我正在努力理解为什么ICMP校验和总数(在补码之前)是此代码行中的总数+向右移16位:
checksum bs = let bs' = (if (BL.length bs) `mod` 2 == 0 then bs else BL.snoc bs 0)
ws = runGet listOfWord16 bs'
total = sum (map fromIntegral ws) :: Word32
in complement (fromIntegral total + fromIntegral (total `shiftR` 16))
Run Code Online (Sandbox Code Playgroud)
RFC 792关于计算校验和的说法是这样的:
校验和
校验和是ICMP消息以ICMP类型开头的补码和的16位补码。为了计算校验和,校验和字段应为零。如果总长度为奇数,则用零的一个八位位组填充接收到的数据以计算校验和。将来可能会替换此校验和。
我理解为什么bs'
要按照“如果总长度为奇数,则将接收到的数据填充一个零的八位位组以计算校验和”的要求进行计算。
我也可以理解将本行代码中完成的16位字的总和 total = sum (map fromIntegral ws) :: Word32
我只是不知道为什么在这行代码中:
complement (fromIntegral total + fromIntegral (total `shiftR` 16))
Run Code Online (Sandbox Code Playgroud)
这+ fromIntegral (total `shiftR` 16)
应该包括在所有。
注意:我已经用wireshark验证了校验和是正确的,仅当我total …
在一些本田车辆中存在用于网络的校验和算法,其针对所提供的数据计算0-15之间的整数.我正在尝试将其转换为普通C,但我认为我遗漏了一些东西,因为我在实现中得到了不同的结果.
虽然Python算法为"ABC"计算6,但我的计算-10,这很奇怪.我是否因为移位而弄乱了什么?
Python算法:
def can_cksum(mm):
s = 0
for c in mm:
c = ord(c)
s += (c>>4)
s += c & 0xF
s = 8-s
s %= 0x10
return s
Run Code Online (Sandbox Code Playgroud)
我的版本,在C:
int can_cksum(unsigned char * data, unsigned int len) {
int result = 0;
for (int i = 0; i < len; i++) {
result += data[i] >> 4;
result += data[i] & 0xF;
}
result = 8 - result;
result %= 0x10;
return result;
}
Run Code Online (Sandbox Code Playgroud)