标签: checksum

为什么下载有时标记为md5,sha1和其他哈希指标?

我到处都看到了这个:

在这里下载!SHA1 = 8e1ed2ce9e7e473d38a9dc7824a384a9ac34d7d0

这是什么意思?就下载而言,散列是如何发挥作用的......我能用它做什么用途?这是您在下载整个文件后必须验证某些校验和的遗留项吗?

hash checksum download

6
推荐指数
2
解决办法
1507
查看次数

如何构建相同的Linux内核两次源并获得相同的校验和

我正在搜索是否可以构建相同的Linux Kerneltwice(相同的源,相同的环境,相同的选项,相同的编译器)并获得相同的校验和.谁知道怎么做?

linux binary kernel checksum binary-reproducibility

6
推荐指数
2
解决办法
2667
查看次数

如何创建媒体文件的稳定校验和?

如何在没有元数据的情况下创建仅媒体数据的校验和,以获得媒体文件的稳定标识.优选地是具有支持多种格式的库的跨平台方法.例如vlc,ffmpeg或mplayer.

(媒体文件应该是普通格式的音频和视频,图像也很好)

media checksum sha1 ffmpeg mplayer

6
推荐指数
1
解决办法
1144
查看次数

你能解释一下扰乱md5和modulo的异常情况吗?

好的,标题非常主观.但这就是问题所在.

背景是我想要针对定义数量的缓存服务器均匀地分发静态Web内容的命中.此外,向客户端的交付应该加快,因为正在使用多个域并且请求不会相互阻塞.我也不需要经典的负载均衡器,但在我的html代码中立即生成正确的链接.

我还想确保同一个服务器始终提供相同的URL.

所以我刚刚定义了一个小函数,通过散列请求url来返回要使用的主机,并根据使用的服务器数量计算模数:

function pseudocode_statify($url) { // $url looks like /folder1/folder2/file.jpg
 return 'http://' . md5($url) % $num_of_servers .'.mydomain.com' . $url;
}
Run Code Online (Sandbox Code Playgroud)

我首先使用十六进制解码和子字符串来防止溢出,但发现它只是在上面的方式工作正常.

但是我的问题是,如果我运行以下测试脚本:

for($i=0;$i<100000;$i++) {
  $md5 = md5(uniqid($i).microtime().rand(1,999999999999));
  $result[$md5%2]++;
}
Run Code Online (Sandbox Code Playgroud)

我期待均匀分布.意味着$ result [0]将接近$ result [1]的值;

此情况并非如此.

好的,这没什么特别的.我会接受这样一个事实:md5并不像我想象的那样均匀分布,并且会像sha1之类的其他散列算法一样.

但我试图重现这些发现并发现了一种我无法解释的模式.

该比率总是约为2/1.事实上,这个比例总是像1/2.16到1/2.17

以上脚本的一些运行的示例输出:

output was generated by: echo "ratio: ".$result[0]/$result[1]."\n";

ratio: 2.1757121534504
ratio: 2.1729411578062
ratio: 2.1726559360393
ratio: 2.1676895664225
ratio: 2.1667416128848
ratio: 2.1667115284133
ratio: 2.1677791605385
ratio: 2.1658969579688
ratio: 2.1668508131769
ratio: 2.1689292821741
Run Code Online (Sandbox Code Playgroud)

现在奇怪的是,总和%2等于1总和%2等于0的比率有时会交替出现!

for($j = 0; $j<100;$j++) {
    for($i=0;$i<100000;$i++) { …
Run Code Online (Sandbox Code Playgroud)

php checksum md5 cryptography

6
推荐指数
1
解决办法
658
查看次数

C - TCP校验和(使用原始套接字) - 如何获取IP地址

raw sockets用于发送TCP数据时,允许保留source ip address零,以便内核输入正确的值.这很有用,尤其IP是在使用多个接口(具有不同地址)时.

我现在的问题是:要计算TCP校验和,我需要知道源IP地址到底是什么.这对我来说似乎不可能?

无论如何确定IP我的传出数据包的来源?

(另一种方法是,将我的原始套接字专门绑定到一个地址,但我宁愿不想这样做).

/编辑:使用Linux

c sockets checksum tcp

6
推荐指数
1
解决办法
1815
查看次数

C编程TCP校验和

我几天来一直无法为TCP做校验和.我在互联网上查看了很多来源,但我见过的所有示例都没有向您展示如何进行TCP校验和.我也查看了RFC文档,但仍遇到问题:

下面是我用来生成校验和的代码:

unsigned short checksum(unsigned short * buffer, int bytes)
{
    unsigned long sum = 0;
    unsigned short answer = 0;
    int i = bytes;
    while(i>0)
    {
            sum+=*buffer;
            buffer+=1;
            i-=2;
    }
    sum = (sum >> 16) + (sum & htonl(0x0000ffff));
    sum += (sum >> 16);
    return ~sum;
}
Run Code Online (Sandbox Code Playgroud)

此功能适用于IP校验和.

下面是我为TCP标头制作的结构:

struct tcp_header
{
    unsigned short tcp_sprt;
    unsigned short tcp_dprt;
    unsigned int tcp_seq;
    unsigned int tcp_ack;
    unsigned char tcp_res:4;
    unsigned char tcp_off:4;
    unsigned char tcp_flags;
    unsigned short tcp_win;
    unsigned …
Run Code Online (Sandbox Code Playgroud)

c checksum tcp raw-sockets

6
推荐指数
1
解决办法
2万
查看次数

在Perl中获取文件校验和的紧凑方式

我正在寻找在Perl中获取文件校验和的方法,但不是通过执行系统命令cksum- 想在Perl本身中这样做,因为脚本需要在UNIX和Windows之间移植.cksum <FILENAME> | awk '{ print $1 }'适用于UNIX,但显然不适用于Windows.我已经探索过MD5但是看起来像获取文件句柄似乎是必要的,并且通常它似乎不是一种非常紧凑的方式来获取该数据(一线优选).

有没有更好的办法?

perl checksum

6
推荐指数
2
解决办法
1万
查看次数

8位校验和由一个关闭

需要帮助找出8位校验和.数据是132byte向量.我原本以为校验想通了,因为我能够传输数据〜30KB的我打击出其校验失败的数据的最后一段了.它由一个人关闭.

d1 = [0x00, 0x00, 0xff, 0x00, 0x00, 0x44, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xff, 0x00, 0x10, 0x11, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xff, 0x00, 0x10, 0x12, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xff, 0x00, 0x10, 0x13, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xff, 0x00, 0x10, 0x14, 0xff, 0x00, 0x10, 0x18, 0xff, 0x00, 0x10, …
Run Code Online (Sandbox Code Playgroud)

python checksum bit-manipulation bitwise-operators

6
推荐指数
1
解决办法
322
查看次数

在 Java 中实现 SQL CHECKSUM

我在 SQL Server 2008 中有一个现有数据库,它通过存储过程为现有 PHP Web 应用程序执行用户身份验证。Web应用程序向存储过程发送一个字符串,但存储过程存储,并使用SQL Checksum检查该值(http://msdn.microsoft.com/en-us/library/ms189788.aspx ) 检查该值。存储过程将字符串转换为 NVARCHAR(50),并将 CHECKSUM 作为 int 存储在用户表中。

我现在正在现有数据库之上编写一个新的 Java 应用程序,并且正在编写一个自定义 spring 身份验证管理器。我想用 Java 重新实现 CHECKSUM 算法,这样我就不需要调用存储过程来执行转换,但是我找不到任何有关 SQL CHECKSUM 如何工作的文档。

我尝试了以下代码,猜测它是 CRC32,但是它无法返回与 SQL CHECKSUM 相同的值:

String pass = "foobar";
CRC32 crc32 = new CRC32();
crc32.update(pass.getBytes("UTF-16")); //This is due to the stored procedure casting as nvarchar
crc32.getValue();
Run Code Online (Sandbox Code Playgroud)

谁能告诉我 SQL CHECKSUM 使用的算法,以便我可以用 Java 重新实现它?

问题也不在于哪种算法提供最佳的安全哈希值。在此特定情况下,安全性超出了要求,因为我们不准备强制重置系统范围的密码。问题是T-SQL CHECKSUM 使用什么算法,以便可以重新实现它。这个特定的用例用于身份验证,但是在许多不同的应用程序中可能需要这样做。

java t-sql checksum sql-server-2008

5
推荐指数
1
解决办法
2605
查看次数

创建一个带有内置校验和的唯一 ID?

我想自动生成一个唯一的 8-10 个字符 ID 字符串,其中包含某种校验和位,以防止数据输入时出现拼写错误。我更喜欢没有序列号的东西,数据输入人员最终会陷入“陈规”并习惯于始终键入相同的序列。

是否有与此类事情相关的最佳实践/陷阱?

更新:好的,我想我需要提供更多细节。

  1. 我想使用字母数字,而不仅仅是数字
  2. 我想要类似于信用卡校验和的行为,但使用 8-10 个字符而不是 16 位数字
  3. 我想让 id 是唯一的;不应该有碰撞的可能性。

第二次更新好吧,我不明白这有什么令人困惑的,但我会尝试进一步解释。我正在尝试创建将在表格中显示的跟踪号码,该表格将在稍后填写并输入数据。我将生成 id 并将其贴在表单上;id 需要是唯一的,它需要支持很多数字,并且对于数据输入来说它需要具有合理的防白痴功能。

我不知道这是否已经做到了,或者即使可以做到,但问一下也无妨。

c# checksum unique

5
推荐指数
1
解决办法
9019
查看次数