天道酬勤,学无止境

checksum

在 Swift 中将字符转换为 Int(Convert Character to Int in Swift)

问题 我正在做一个项目,其中包括使用 Damm 算法验证 Int 输入的校验和。 我设法创建了一个操作表,我访问表中值的方法涉及传递一个中间值和一个数字作为列值传入。 前任。 self.tableToUse[interim,checkSumArray[i]] 不幸的是,当我尝试将输入中的数字传递到 get/set 方法时遇到了一个障碍,在该方法中我找不到将字符转换为 Int 的方法。 func encode(number: Int) -> Int{ var checkSumArray = [Int]() if number > 99999999 { println("number is too large") return 0 } else if number < 0 { println("invalid input") return 0 } else { checkSumArray.append(number%(10)) checkSumArray.append((number%(100)-checkSumArray[0])/10) checkSumArray.append((number%(1000)-checkSumArray[1])/100) checkSumArray.append((number%(10000)-checkSumArray[2])/1000)

2021-09-18 20:04:56    分类:技术分享    ios   swift   int   character   checksum

Scapy TCP 校验和重新计算奇数行为(Scapy TCP Checksum Recalculation Odd behaviour)

问题 我正在尝试进行 TCP ACK 欺骗。 我从 pcap 文件中嗅探一个 ACK​​ 数据包,并在循环中发送它,增加其 ACK 编号以及另一个选项字段。 嗅探部分:(预欺骗) from scapy.all import * from struct import unpack, pack pkt = sniff(offline="mptcpdemo.pcap", filter="tcp", count=15) i=6 while True: ack_pkt = pkt[i] if ack_pkt.sprintf('%TCP.flags%') == 'A': break i+=1 del ack_pkt.chksum del ack_pkt[TCP].chksum print ack_pkt.chksum, ack_pkt[TCP].chksum hex2pkt = ack_pkt.__class__ 欺骗部分:(未优化) count=1 while count<5: ack_pkt[TCP].ack += 1 pkt_hex = str(ack_pkt) rest = pkt_hex[:-4] last_4_bit = unpack('!I',pkt_hex[-4:])[0] new_hex_pkt = rest + pack('>I',(last_4_bit+1)) new

2021-09-16 03:55:10    分类:技术分享    python   checksum   scapy

校验大量质数? (用于验证)(Checksumming large swathes of prime numbers? (for verification))

问题 是否有任何聪明的算法可以计算数百万或数十亿素数的高质量校验和? 即具有最大的错误检测能力并且可能是可分割的? 动机: 小素数 - 最大 64 位 - 可以根据需要筛选到每秒数百万个,通过使用小位图筛选潜在因子(最多 2^32-1)和第二个位图筛选数字目标范围。 算法和实现相当简单和直接,但问题在于细节:值往往会推动 - 或超过 - 无处不在的内置整数类型的限制,边界情况比比皆是(可以这么说),甚至浮点严格性的差异也可能导致如果编程不适合防御,则损坏。 更不用说优化编译器可能造成的混乱,即使是静态库中已经编译、已经测试过的代码(如果使用链接时代码生成)。 更不用说更快的算法往往更复杂,因此更脆弱。 这有两个后果:除非使用最终的可执行映像执行测试,否则测试结果基本上没有意义,并且非常需要在正常使用期间在运行时验证正确操作。 检查预先计算的值将提供最高程度的置信度,但所需的文件又大又笨重。 一个包含 1000 万个素数的文本文件,未压缩大约 100 MB,压缩超过 10 MB; 存储字节编码的差异需要每个素数一个字节,熵编码最多可以将大小减少一半(1000 万个素数为 5 MB)。 因此,即使文件只覆盖 2^32 以内的小因素,其重量也将达到 100 MB 左右,并且解码器的复杂性将超过窗口筛本身的复杂性。 这意味着检查文件是不可行的,除非作为对新建可执行文件的最终发布检查。

2021-09-15 05:04:05    分类:技术分享    primes   checksum   discrete-mathematics

校验大量质数? (用于验证)(Checksumming large swathes of prime numbers? (for verification))

问题 是否有任何聪明的算法可以计算数百万或数十亿素数的高质量校验和? 即具有最大的错误检测能力并且可能是可分割的? 动机: 小素数 - 最大 64 位 - 可以根据需要筛选到每秒数百万个,通过使用小位图筛选潜在因子(最多 2^32-1)和第二个位图筛选数字目标范围。 算法和实现相当简单和直接,但问题在于细节:值往往会推动 - 或超过 - 无处不在的内置整数类型的限制,边界情况比比皆是(可以这么说),甚至浮点严格性的差异也可能导致如果编程不适合防御,则损坏。 更不用说优化编译器可能造成的混乱,即使是静态库中已经编译、已经测试过的代码(如果使用链接时代码生成)。 更不用说更快的算法往往更复杂,因此更脆弱。 这有两个后果:除非使用最终的可执行映像执行测试,否则测试结果基本上没有意义,并且非常需要在正常使用期间在运行时验证正确操作。 检查预先计算的值将提供最高程度的置信度,但所需的文件又大又笨重。 一个包含 1000 万个素数的文本文件,未压缩大约 100 MB,压缩超过 10 MB; 存储字节编码的差异需要每个素数一个字节,熵编码最多可以将大小减少一半(1000 万个素数为 5 MB)。 因此,即使文件只覆盖 2^32 以内的小因素,其重量也将达到 100 MB 左右,并且解码器的复杂性将超过窗口筛本身的复杂性。 这意味着检查文件是不可行的,除非作为对新建可执行文件的最终发布检查。

2021-09-15 05:02:13    分类:技术分享    primes   checksum   discrete-mathematics

找出 RS232 数据的 CRC 或 CHECKSUM(Find out CRC or CHECKSUM of RS232 data)

问题 我需要与 RS232 设备通信,我没有可用的规格或信息。 我发送一个 16 字节的命令并返回一个 16 字节的结果。 最后一个字节看起来像某种 crc 或校验和,我试过使用这个 http://miscel.dk/MiscEl/miscelCRCandChecksum.html 没有运气。 任何人都可以对 crc/校验和算法进行逆向工程? 以下是使用 RS-232 监控程序捕获的一些数据: 01 80 42 00 00 00 00 00 00 00 00 00 00 00 01 B3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 02 51 01 80 42 00 00 00 00 00 00 00 00 00 00 00 03 0F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 04 8C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 05 D2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 06 30 01 80 42 00 00 00 00 00 00 00 00 00 00 00 07 6E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 08 2F 01 80 42 00 00 00

2021-09-14 23:59:06    分类:技术分享    reverse-engineering   checksum   serial-port   crc

找出 RS232 数据的 CRC 或 CHECKSUM(Find out CRC or CHECKSUM of RS232 data)

问题 我需要与 RS232 设备通信,我没有可用的规格或信息。 我发送一个 16 字节的命令并返回一个 16 字节的结果。 最后一个字节看起来像某种 crc 或校验和,我试过使用这个 http://miscel.dk/MiscEl/miscelCRCandChecksum.html 没有运气。 任何人都可以对 crc/校验和算法进行逆向工程? 以下是使用 RS-232 监控程序捕获的一些数据: 01 80 42 00 00 00 00 00 00 00 00 00 00 00 01 B3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 02 51 01 80 42 00 00 00 00 00 00 00 00 00 00 00 03 0F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 04 8C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 05 D2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 06 30 01 80 42 00 00 00 00 00 00 00 00 00 00 00 07 6E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 08 2F 01 80 42 00 00 00

2021-09-14 23:57:05    分类:技术分享    reverse-engineering   checksum   serial-port   crc

是否有将摘要放入正在消化的文件中的算法?(Are there algorithms for putting a digest into the file being digested?)

问题 是否有将摘要放入正在消化的文件中的算法? 换句话说,是否有算法或库,或者甚至有可能对包含在被散列/消化的文件中的文件进行散列/摘要。 由于显而易见的原因,这会很方便,例如内置的 ISO 摘要。 我试过在谷歌上搜索诸如“MD5 注入”和“在文件的文件中消化”之类的东西。 没有运气(可能有充分的理由。) 不确定它在数学上是否可行。 似乎您可以遍历文件,但随后您必须粗暴处理最后一位(假设摘要是文件或对象中的最后一个内容。) 谢谢,陈兹 回答1 做到这一点的唯一方法是,如果您定义了文件格式,那么散列仅适用于不包含散列的文件部分。 但是,将散列包含在文件中(如内置于 ISO 中)会破坏散列的整体安全优势。 您需要从不同的频道获取哈希值并将其与您的文件进行比较。 回答2 在有限的意义上是可能的: 非加密安全哈希 您可以使用不安全的哈希值(例如 CRC 校验和系列)来执行此操作。 麦克林的gzip奎因 Caspian Maclean 创建了一个 gzip quine,它可以自行解压。 由于 Gzip 格式包含未压缩数据的 CRC-32 校验和(请参阅此处的规范),并且未压缩数据等于文件本身,因此该文件包含自己的哈希。 所以这是可能的,但麦克林没有指定他用来生成它的算法: 理论上很简单,但是我使用的帮助程序在一个失败的硬盘上,我还没有设置一个新的工作 linux 系统来运行它们。

2021-09-13 09:29:11    分类:技术分享    md5   sha1   checksum   digest

SQL proc 计算 7 位和 12 位 upc 的校验位(SQL proc to calculate check digit for 7 and 12 digit upc)

问题 我只需要再次在互联网上搜索这段代码,所以我想我会把它放在这里,这样我下次可以更快地找到它,希望你也能更快地找到它:) 回答1 检查这个。 下面的代码可以检查所有 GTIN 中的数字(EAN8、EAN13、EAN14、UPC / A、UPC / E) CREATE FUNCTION [dbo].[check_digit] ( @GTIN VARCHAR(14) ) RETURNS TINYINT AS BEGIN DECLARE @Index TINYINT, @Multiplier TINYINT, @Sum TINYINT, @checksum TINYINT, @result TINYINT, @GTIN_strip VARCHAR(13) SELECT @GTIN_strip = SUBSTRING(@GTIN,1,LEN(@GTIN)-1); SELECT @Index = LEN(@GTIN_strip), @Multiplier = 3, @Sum = 0 WHILE @Index > 0 SELECT @Sum = @Sum + @Multiplier * CAST(SUBSTRING(@GTIN_strip, @Index, 1) AS TINYINT), @Multiplier = 4 - @Multiplier, @Index = @Index - 1

2021-09-13 06:38:28    分类:技术分享    sql   tsql   barcode   checksum

从校验和生成特定范围内的数字(Generate a number in a specific range from a checksum)

问题 我正在研究一个数字生成器,它以字符串作为输入,并生成特定范围内的数字作为输出。 为此,我需要确定 md5 校验和可以具有的最小和最大可能值,然后将 md5 校验和转换为该范围内的数字。 如何将 md5 校验和转换为指定范围内的数字? function getNumberInRange(md5checksum, min, max){ //generate a number between min to max, inclusive, using the md5 checksum that is entered in the input. //Every input should have exactly one output. }

2021-09-12 02:27:11    分类:技术分享    javascript   md5   checksum

用C计算ICMPv6数据包的校验和(Calculating checksum of ICMPv6 Packet in C)

问题 我正在尝试计算 ICMPv6 消息(准确地说,是邻居广告)的校验和。 RFC 4443 将其描述为“整个 ICMPv6 消息的补码和的 16 位补码” 还有一些关于如何做到这一点的示例代码(虽然我认为它来自 IPv4,但唯一的区别是总和中包含的内容,而不是如何计算它):RFC 1071 我从wireshark 获取了一个数据包,并按主机字节顺序输入了短裤。 然后我打印正确的校验和,将其归零并计算我的。 但它们不匹配。 根据 RFC 1071,字节序不应该是问题(结果不仅仅是字节交换,而是完全关闭)。 根据 RFC 2460 #8.1,我需要将“伪标头”包含在计算中,仅包含 Src+Dst 地址、长度为 32 位宽的字段和下一个标头类型。 调用代码: uint32_t payloadlen = htonl(32); struct ip6_hdr *ip6; struct nd_neighbor_advert *na; size_t len, offset, tmplen; uint8_t *tmppacket, icmp = 58; uint8_t packet[] = { 0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3A, 0xFF, 0x20, 0x01, 0x0D, 0xB8, 0xDD, 0xDD, 0x00, 0x00, 0x00

2021-09-12 01:55:20    分类:技术分享    c   ipv6   checksum   icmp