计算编码的64字符串的CRC32-为什么会有2个不同的结果?

2020-09-15 05:34发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要从普通字符串生成一个编码的64字符串,然后计算它的CRC32以通过Web服务发送信息。

有趣的是:我发现了一堆类和方法来计算它。.并且我得到了不同的结果!

例如,给定此Encoded64字符串

64.txt ,我得到2个不同的结果!

我得到了第三个结果!

为什么?

代码段
数据:crc类型引用到if_scv_crc32,
  val_satc类型cva_crc32,
  satc TYPE REF TO CL_SATC_CRC,
  val TYPE cva_crc32。
 创建对象饱和度。
 val_satc = satc-> get_crc32_for_text_sequence(i_invoice)。
  val = cl_scv_crc_services => create()-> create_crc32_for_string(i_invoice)-> get_value()。

(27.3 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要从普通字符串生成一个编码的64字符串,然后计算它的CRC32以通过Web服务发送信息。

有趣的是:我发现了一堆类和方法来计算它。.并且我得到了不同的结果!

例如,给定此Encoded64字符串

64.txt ,我得到2个不同的结果!

我得到了第三个结果!

为什么?

代码段
数据:crc类型引用到if_scv_crc32,
  val_satc类型cva_crc32,
  satc TYPE REF TO CL_SATC_CRC,
  val TYPE cva_crc32。
 创建对象饱和度。
 val_satc = satc-> get_crc32_for_text_sequence(i_invoice)。
  val = cl_scv_crc_services => create()-> create_crc32_for_string(i_invoice)-> get_value()。

(27.3 kB)
付费偷看设置
发送
4条回答
落灬小鱼
1楼 · 2020-09-15 06:24.采纳回答

好吧,我在类CL_ABAP_ZIP的方法CRC32中发现了问题

由于它返回的INT非常笨拙,因此我尝试复制并粘贴如果IF为false时实现的选项" manual"。

然后... KABOOM! 我发现了一个讨厌的小错误:将HEX移至INT。
在代码中复制了手动部分,我发现CRC的HEX值正确(HURRAY!),但将其移至CRC32,这是因为有些完全不同, 但等于IF的"系统方法"的结果

我应该检查有关此的OSS注释...

感谢 Tomas Buryanek 他的"十六进制值"在我疲惫的大脑中敲响了钟声!

2楼-- · 2020-09-15 06:23

-1203672788(十进制)= 2C6941B8(十六进制)-检查调试器屏幕截图。

2C6941B8 = B841692C的反向字节

2C 69 41 B8

南山jay
3楼-- · 2020-09-15 06:26

我没有使用crc32的经验,但是我在字符串" tomas"上尝试了此方法:

 cl_abap_zip => crc32 

它返回了十六进制" 5474D05C"中的整数十进制值" 1557165140"。

一个PHP Web服务返回了相同的十进制数字。 但是大多数Web CRC32服务都返回" 5cd07454"。 哪些是反向字节(我猜这是CRC问题中的一件事)。

希望它会帮助...

我不敢为您加标签,Tomas! :D

很高兴您跳入!

我也尝试过cl_abap_zip,我得到了第4个结果...现在...为什么??!?!


我担心CL_ABAP_ZIP可能会导致另一个问题,因为我需要将字符串解码为十六进制,这可能会导致某种不同的结果?

一周热门 更多>