使用AES-128ECB编码/解码base64Binary

2020-09-15 08:34发布

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

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


大家好,

要遵循匈牙利有关电子发票(NAV系统)的新法律,我正在为数据的编码和解码而奋斗……我正在为此而努力,失败。

场景
每种通信和有效载荷都适用于XML结构。

使用提供的登录名,我向API索要令牌,然后以base64Binary的身份得到答案,并使用AES-128 ECB算法加密。

我应该解密令牌,并在数据通信中将其发回给构面定义的字段

我到目前为止所做的事情

  • 我收到令牌(例如上次呼叫的示例:mrlWpOOkvG8uuFL05v/VPyCXxr86OoS/dPu5PFsz + mWB29p/kn1MxPsTqZ9MmNcBpEfI8RU3lzbxUu7t + U0tjg ==)
  • 将我的令牌转换为 XSTRING 以便我们可以对其进行解密
类型:t_t开头,
                 箱型char100
              t_t结束。
     数据:带有默认密钥的t_bin t_t类型表,
           r_bin类型t_t,
           镜头类型i。
     r_bin-bin = i_data。  "我的令牌
     将r_bin附加到t_bin。  len = strlen(r_bin-bin)。  " 88
     通话功能'SCMS_BINARY_TO_XSTRING'
       出口
          input_length = len
       输入
         缓冲区= e_hex
       桌子
         binary_tab = t_bin
       例外情况
         失败= 1
         其他= 2。
  • 要解密令牌,我得到了一个字符串型密钥,所以我也将其转换为XSTRING
 FUNCTION'SCMS_STRING_TO_XSTRING'
      出口
        text = c_key"字符串键
      输入
         缓冲区= xkey
      例外情况
        失败= 1
        其他= 2。
 mode = zcl_aes_utility => mc_encryption_mode_ecb.zcl_aes_utility => decrypt_xstring(EXPORTING i_key = xkey i_data = i_token i_initialization_vector = iv"初始i_encryption_mode =模式IMPORTING e_data = resultx)。
  • 最后,我再次将解密的令牌重新转换为Base64
呼叫功能'SCMS_BASE64_ENCODE'
  出口
  输入= x_s
  input_length = len"来自解密的XSTRING/2
  输入
  输出= o_c
  例外情况
  output_too_small = 1
  其他= 2。
  如果sy-subrc <> 0。
 *在这里实施适当的错误处理
  万一。
  令牌= o_c。
  • 这会导致一个令牌,就像第一个令牌(ryyXiG2iEn + Y/NSeAyY4GAhlhl3i6o9PaC0s3UhnPPGKjeRqmODXo6vXGW1TUoswfTn5rVLNm2Lgah6zmSDY7Cg ==)一样长

我还尝试使用我在SCN和网上找到的建议解决方案将我的XSTRING转换为String而不是Base64(即 http://www.samplecodeabap.com/convert-xstring-string/),但我放弃了此解决方案,因为它最终会生成一堆乱码而不是unicode。

我需要什么?
我确定我正在弄乱获取和解密令牌的整个过程,也许是在弄乱字符串大小 ,但如果有人可以打我的头,并指向正确的方向,我真的很感激。

非常感谢!

(12.6 kB)

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

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


大家好,

要遵循匈牙利有关电子发票(NAV系统)的新法律,我正在为数据的编码和解码而奋斗……我正在为此而努力,失败。

场景
每种通信和有效载荷都适用于XML结构。

使用提供的登录名,我向API索要令牌,然后以base64Binary的身份得到答案,并使用AES-128 ECB算法加密。

我应该解密令牌,并在数据通信中将其发回给构面定义的字段

我到目前为止所做的事情

  • 我收到令牌(例如上次呼叫的示例:mrlWpOOkvG8uuFL05v/VPyCXxr86OoS/dPu5PFsz + mWB29p/kn1MxPsTqZ9MmNcBpEfI8RU3lzbxUu7t + U0tjg ==)
  • 将我的令牌转换为 XSTRING 以便我们可以对其进行解密
类型:t_t开头,
                 箱型char100
              t_t结束。
     数据:带有默认密钥的t_bin t_t类型表,
           r_bin类型t_t,
           镜头类型i。
     r_bin-bin = i_data。  "我的令牌
     将r_bin附加到t_bin。  len = strlen(r_bin-bin)。  " 88
     通话功能'SCMS_BINARY_TO_XSTRING'
       出口
          input_length = len
       输入
         缓冲区= e_hex
       桌子
         binary_tab = t_bin
       例外情况
         失败= 1
         其他= 2。
  • 要解密令牌,我得到了一个字符串型密钥,所以我也将其转换为XSTRING
 FUNCTION'SCMS_STRING_TO_XSTRING'
      出口
        text = c_key"字符串键
      输入
         缓冲区= xkey
      例外情况
        失败= 1
        其他= 2。
 mode = zcl_aes_utility => mc_encryption_mode_ecb.zcl_aes_utility => decrypt_xstring(EXPORTING i_key = xkey i_data = i_token i_initialization_vector = iv"初始i_encryption_mode =模式IMPORTING e_data = resultx)。
  • 最后,我再次将解密的令牌重新转换为Base64
呼叫功能'SCMS_BASE64_ENCODE'
  出口
  输入= x_s
  input_length = len"来自解密的XSTRING/2
  输入
  输出= o_c
  例外情况
  output_too_small = 1
  其他= 2。
  如果sy-subrc <> 0。
 *在这里实施适当的错误处理
  万一。
  令牌= o_c。
  • 这会导致一个令牌,就像第一个令牌(ryyXiG2iEn + Y/NSeAyY4GAhlhl3i6o9PaC0s3UhnPPGKjeRqmODXo6vXGW1TUoswfTn5rVLNm2Lgah6zmSDY7Cg ==)一样长

我还尝试使用我在SCN和网上找到的建议解决方案将我的XSTRING转换为String而不是Base64(即 http://www.samplecodeabap.com/convert-xstring-string/),但我放弃了此解决方案,因为它最终会生成一堆乱码而不是unicode。

我需要什么?
我确定我正在弄乱获取和解密令牌的整个过程,也许是在弄乱字符串大小 ,但如果有人可以打我的头,并指向正确的方向,我真的很感激。

非常感谢!

(12.6 kB)
4条回答
落灬小鱼
1楼 · 2020-09-15 09:00.采纳回答

你好西蒙妮,

从一开始,您就提到收到的令牌(mrlWpOOkvG8uuFL05v/VPyCXxr86OoS/dPu5PFsz + mWB29p/kn1MxPsTqZ9MmNcBpEfI8RU3lzbxUu7t + U0tjg ==)。

但是之后,您尝试使用SCMS_BINARY_TO_XSTRING将其转换为xstring。

我认为这是问题所在。

因为令牌看起来像BASE64字符串。 因此,您需要将此BASE64字符串解码为xstring。 然后您可以解密此xstring,所以没有...其余步骤似乎还可以。
提示:我喜欢使用CL_HTTP_UTILITY进行BASE64的解码/编码:-)有4种方法(2个用于string,2个用于xstring) ...

CPLASF-自律
2楼-- · 2020-09-15 08:54

很高兴您可以使用它:-)

Aaron 3364
3楼-- · 2020-09-15 09:16

嗨西蒙妮,

类似的开发是由某人较早进行的,并且在解密方面存在一些问题。 AES库的问题之一对此进行了讨论。 请在网址中查看问题

https://github.com/Sumu-Ning/AES/issues/15

问题在那里有所不同,但是,它可能使您知道如何在此处理。 此外,这里使用的代码是整个库的改编版本,而不是库本身。

希望有帮助。

小c菟菟
4楼-- · 2020-09-15 09:00

嗨Ravi,

这不是解密问题:正如我所说,我使用了一些在线工具,并且得到了与全班相同的结果。

所以我以某种方式确信这不是重点:\

一周热门 更多>