用户正在将照片上传到我们的 php 构建系统。由于内容不相关,我们将其中一些标记为禁止。I\xc2\xb4m 正在搜索“自动比较”算法的优化,该算法会跳过这些标记为禁止的照片。每次上传都需要与许多 vorbinden 进行比较。
\n\n可能的解决方案:
\n\n1/ 存储禁止的文件并比较整个内容 - 效果很好,但速度很慢。
\n\n2/存储图像文件校验和并比较校验和——这是提高速度的想法。
\n\n3/任何足够快并且可以比较照片之间相似性的智能算法。但我对 PHP 中的这些没有任何想法。
\n\n最好的解决方案是什么?
\n我目前正在编写一个 C 程序,该程序从另一个生成的数据文件构建 PNG 图像。该图像是调色板类型。
Adler-32 校验和是根据未压缩数据计算得出的吗?
a) IDAT 数据块中的每个压缩块?
b) IDAT 数据块中的所有压缩块?
c) 跨越所有 IDAT 数据块的所有压缩块?
从http://www.w3.org/TR/PNG/、https://www.rfc-editor.org/rfc/rfc1950和 rfc1951 (与之前的地址相同)的文档中,我认为这是上面的情况“c”,允许 deflate 实现切割和更改每个块的数据压缩方式,并忽略压缩块在连续 IDAT 块之间的分割方式。
它是否正确?
我正在 go 中实现adler32 checksum的滚动版本。
这个答案有助于仔细检查我的数学。然而我很难在 golang 中正确实现它。
我写了以下代码:
func roll(adler, n, leave, enter uint32) uint32 {
a := adler & 0xffff
b := adler >> 16
a = (a + enter - leave) % MOD
b = (b - n*leave - 1 + a) % MOD
return b<<16 | a
}
Run Code Online (Sandbox Code Playgroud)
它在各种输入上进行了测试,并且运行良好,直到我决定在随机数据上运行它。这是一个不起作用的示例(我找到了其中几个)。
令我困惑的是,Python 中的相同代码在这些输入上完美运行:
def roll(adler, n, leave, enter):
a = adler & 0xffff
b = adler >> 16
a = (a + …
Run Code Online (Sandbox Code Playgroud) 我正在尝试模仿 Windows 应用程序,该应用程序格式化消息并通过 USB 通过 UART 将其发送到显示该消息的设备。
应用程序计算校验和和并将其粘贴在消息后面,否则设备将不会接受该命令。校验和不是 crc8 校验和,但它是什么?
使用 USB 监视器,我看到了以下测试用例:
ASCII:<L1><PA><IB><MA><WC><OM>Test!
十六进制:3c4c313e3c50413e3c49423e3c4d413e3c57433e3c4f4d3e5465737421
校验和:6A
ASCII:<L1><PA><IB><MA><WC><OM>Testa!
十六进制:3c4c313e3c50413e3c49423e3c4d413e3c57433e3c4f4d3e546573746121
校验和:0B
ASCII:<L1><PA><IB><MA><WC><OM>Test some more
十六进制:3c4c313e3c50413e3c49423e3c4d413e3c57433e3c4f4d3e5465737420736f6d65206d6f7265
校验和:4A
ASCII:<L1><PA><IE><MA><WC><OE>[SPACE]
十六进制:3c4c313e3c50413e3c49453e3c4d413e3c57433e3c4f453e20
校验和:52
该网站在第一行返回正确的校验和(CheckSum8 Xor)。我正在尝试模仿该功能。(注意:当您发送 ASCII 值时,网站会崩溃,因为它包含<>
字符。请改用十六进制值!)
目前,我的代码执行以下操作:
let hex = ascii2hex('<L1><PA><IB><MA><WC><OM>Test!') // or one of the other ascii values
let checksum = chk8xor(hex)
console.log(checksum)
function ascii2hex(str) {
var arr = [];
for (var i …
Run Code Online (Sandbox Code Playgroud) 如果您在浏览器中使用 Firebase 实时数据库,则需要共享 API 密钥,因此无法保护数据库。我有一个简单的游戏(ASCII Tetris)可以保存游戏的高分,问题是任何人都可以欺骗请求并发送自己的分数。(这是一个人所做的截图):
有什么解决方案可以防止这种情况?我正在考虑对 CSRF 的保护做同样的事情,在那里你创建一个令牌并验证它是否有效,这样只有我的代码才会有适当的 CSRF 像令牌。攻击者仍然可以在调试器中暂停应用程序并检查令牌并发送他自己的令牌,但这需要他知道如何使用调试器,因此破解会有点困难。
firebase 实时数据库有".validate"
规则,您可以验证令牌是否有效(https://firebase.google.com/docs/database/security)。我也在考虑创建类似校验和链的东西(比如在 git 或区块链中)。
你认为有可能创造出这样的东西吗?您知道对于我保存分数的情况,是否有更好的方法来保护 firebase 实时数据库?对于这个简单的游戏,除了像我这样的简单案例之外,答案可能对其他案例有用。
我正在寻找一种用 JavaScript 编写并在普通浏览器中运行的 CRC-16 CRC 算法。我知道有大量以各种编程语言实现 CRC-16 的代码示例。但我仍然无法解决我的问题。以下示例显示了 NodeJ 的 CRC-16 校验和检查。
https://github.com/donvercety/node-crc16/blob/master/crc16.js
为了让 NodeJS 代码在普通浏览器中运行,我对其进行了如下修改。
const crctab16 = new Uint16Array([
0X0000, 0X1189, 0X2312, 0X329B, 0X4624, 0X57AD, 0X6536, 0X74BF,
0X8C48, 0X9DC1, 0XAF5A, 0XBED3, 0XCA6C, 0XDBE5, 0XE97E, 0XF8F7,
0X1081, 0X0108, 0X3393, 0X221A, 0X56A5, 0X472C, 0X75B7, 0X643E,
0X9CC9, 0X8D40, 0XBFDB, 0XAE52, 0XDAED, 0XCB64, 0XF9FF, 0XE876,
0X2102, 0X308B, 0X0210, 0X1399, 0X6726, 0X76AF, 0X4434, 0X55BD,
0XAD4A, 0XBCC3, 0X8E58, 0X9FD1, 0XEB6E, 0XFAE7, 0XC87C, 0XD9F5,
0X3183, 0X200A, 0X1291, 0X0318, 0X77A7, 0X662E, 0X54B5, 0X453C,
0XBDCB, 0XAC42, 0X9ED9, …
Run Code Online (Sandbox Code Playgroud)我必须将文件从一台服务器传输到另一台服务器。自动化脚本将在每晚 12 点进行传输。我想比较传输前文件的 md5 哈希值和传输后文件的 md5 哈希值。md5 哈希值足够用于此目的吗?
或者我应该使用 sha256 ?
我主要担心的是 sha256 比 md5 慢得多。我的文件大小约为每个文件 1 GB。
我需要计算IP数据包的校验和,如http://www.faqs.org/rfcs/rfc1071.html中所述.
我已经有以下代码:
#!/usr/bin/python
import struct
data = "45 00 00 47 73 88 40 00 40 06 a2 c4 83 9f 0e 85 83 9f 0e a1"
# a test for the checksum calculation
def _checksum(data):
#calculate the header sum
ip_header_sum = sum(struct.unpack_from("6H", data))
#add the carry
ip_header_sum = (ip_header_sum & 0xFFFF) + (ip_header_sum >> 16 & 0xFFFF)
#invert the sum, python does not support inversion (~a is -a + 1) so we have to do
#little trick: …
Run Code Online (Sandbox Code Playgroud) 我试图了解IPv6的UDP校验和计算方法.对于IPv4数据包,我找到了这个链接 - http://www4.ncsu.edu/~mlsichit/Teaching/407/Resources/udpChecksum.html.我有一个包:
IPv6标头是 - 60 00 00 00 00 0c 11 fd 21 00 00 00 00 00 00 01 ab cd 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01 60
UDP标头是 - 26 92 26 92 00 0c 7e d5
数据为 - 12 34 56 78
根据校验和计算,校验和为7ed5.任何人都可以解释校验和是如何产生这种价值的吗?我想手动计算它来理解方法.
我目前正在对软件进行逆向工程,该软件可以为给定的数据缓冲区计算2字节宽的校验和。该代码来自16位DLL(NE格式),并使用Borland C ++进行了编译。我怀疑校验和为CRC-16,且多边形为0x8408,但是我没有机会计算相同的CRC,所以我想知道实现是否为“ CRC16标准”。
这是程序集的实现:
crc_cal proc far
var_4= word ptr -4
arg_0= word ptr 6
arg_2= dword ptr 8
mov ax, seg dseg37
inc bp
push bp
mov bp, sp
push ds
mov ds, ax
sub sp, 2
push si
push di
xor cx, cx
mov dx, 0FFFFh
mov [bp+var_4], 8408h
loc_42646:
les bx, [bp+arg_2]
add bx, cx
mov al, es:[bx]
xor al, dl
mov dl, al
inc cx
xor di, di
jmp short loc_42672
loc_42657:
mov si, dx …
Run Code Online (Sandbox Code Playgroud)