点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我们需要解密由外部服务器发送的消息。 加密期间使用的算法是AES128/ECB/PKCS5。 我们已遵循此 AES加密博客,并且已使用co_aes128_algorithm_pem代替了co_aes256_algorithm_pem。
它运行良好,可以在邮件大小小于15个字符时解密示例邮件。 当我们尝试解密长度超过15个字符的邮件时,它失败了,但出现以下异常。
发生异常,下面将对其进行详细说明。 该异常已分配给类" CX_SEC_SXML_ENCRYPT_ERROR",并且未在过程" DECRYPT""((METHOD)""中捕获,也没有通过RAISING子句传播。 由于该过程的调用者无法预料到此异常,因此当前程序已终止。 发生这种情况的原因是:解密XML数据时出错。
以下代码段用于解密。 请帮助我们解决问题。
i_iv ='00000000000000000000000000000000'。 如果i_text不是初始的。 调用函数'SCMS_BASE64_DECODE_STR' 出口 输入= i_text * UNESCAPE ='X' 输入 输出= i_xstring *例外情况 *失败= 1 *其他= 2 。 如果sy-subrc <> 0。 *在这里实施适当的错误处理 万一。 万一。 如果i_xstring不是初始的。 *为了使CL_SEC_SXML_WRITER与外部应用程序一起使用,我们需要添加16位 *解密前需要额外填充 以字节模式将i_iv(16)i_xstring连接到i_xstring。 尝试。 cl_sec_sxml_writer =>解密( 出口 密文= i_xstring 键= i_key_xstring 算法= cl_sec_sxml_writer => CO_AES128_ALGORITHM_PEM 输入 明文= lv_message_decrypted)。 "将xstring转换为字符串以进行输出 cl_abap_conv_in_ce =>创建(输入= lv_message_decrypted)->读取(导入数据= e_text_dec)。 写道:/e_text_dec。 将cx_sec_sxml_encrypt_error捕获到data(oref)中。 努力。 endif。
SAP实施用于CBC模式,并且您的数据已使用ECB加密。
它的前16个字节有效,假设IV双方都相同,例如 零,因为AES的块长度是128位= 16个字节,并且没有链接发生。
您可以相应地更改加密或在ABAP(不是内核模块)中使用AES实现,例如:
https://github.com/Sumu-Ning/AES (未经我的测试 )。
另一种选择是将邮件拆分为16个字节的块,并依次对其进行解密。 这样,您将保持在EBC模式。
一周热门 更多>