我到处都看到了这个:
在这里下载!SHA1 = 8e1ed2ce9e7e473d38a9dc7824a384a9ac34d7d0
这是什么意思?就下载而言,散列是如何发挥作用的......我能用它做什么用途?这是您在下载整个文件后必须验证某些校验和的遗留项吗?
我正在搜索是否可以构建相同的Linux Kerneltwice(相同的源,相同的环境,相同的选项,相同的编译器)并获得相同的校验和.谁知道怎么做?
如何在没有元数据的情况下创建仅媒体数据的校验和,以获得媒体文件的稳定标识.优选地是具有支持多种格式的库的跨平台方法.例如vlc,ffmpeg或mplayer.
(媒体文件应该是普通格式的音频和视频,图像也很好)
好的,标题非常主观.但这就是问题所在.
背景是我想要针对定义数量的缓存服务器均匀地分发静态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) 当raw sockets
用于发送TCP
数据时,允许保留source ip address
零,以便内核输入正确的值.这很有用,尤其IP
是在使用多个接口(具有不同地址)时.
我现在的问题是:要计算TCP
校验和,我需要知道源IP地址到底是什么.这对我来说似乎不可能?
无论如何确定IP
我的传出数据包的来源?
(另一种方法是,将我的原始套接字专门绑定到一个地址,但我宁愿不想这样做).
/编辑:使用Linux
我几天来一直无法为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) 我正在寻找在Perl中获取文件校验和的方法,但不是通过执行系统命令cksum
- 想在Perl本身中这样做,因为脚本需要在UNIX和Windows之间移植.cksum <FILENAME> | awk '{ print $1 }'
适用于UNIX,但显然不适用于Windows.我已经探索过MD5但是看起来像获取文件句柄似乎是必要的,并且通常它似乎不是一种非常紧凑的方式来获取该数据(一线优选).
有没有更好的办法?
需要帮助找出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) 我在 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 使用什么算法,以便可以重新实现它。这个特定的用例用于身份验证,但是在许多不同的应用程序中可能需要这样做。
我想自动生成一个唯一的 8-10 个字符 ID 字符串,其中包含某种校验和位,以防止数据输入时出现拼写错误。我更喜欢没有序列号的东西,数据输入人员最终会陷入“陈规”并习惯于始终键入相同的序列。
是否有与此类事情相关的最佳实践/陷阱?
更新:好的,我想我需要提供更多细节。
第二次更新好吧,我不明白这有什么令人困惑的,但我会尝试进一步解释。我正在尝试创建将在表格中显示的跟踪号码,该表格将在稍后填写并输入数据。我将生成 id 并将其贴在表单上;id 需要是唯一的,它需要支持很多数字,并且对于数据输入来说它需要具有合理的防白痴功能。
我不知道这是否已经做到了,或者即使可以做到,但问一下也无妨。