SAP加密概述 您所在的位置:网站首页 接口加密算法MD5 SAP加密概述

SAP加密概述

2023-11-16 07:03| 来源: 网络整理| 查看: 265

目录

背景

简介

实现        

MD5/SHA1

HMAC

DES/3DES/AES

RSA

PGP

其它

背景

        在做项目时,要求数据安全的项目越来越多,因此sap和外围系统的交互以及本身数据的安全性等都需要考虑数据加密,这里简单介绍SAP中的一些数据加密实现形式。

简介

        单向加密(消息摘要算法),主要为MD5,SHA1以及HMAC,基于哈希运算生成消息摘要,常用来验证数据完整性,密码校验,签名等。

        对称加密,常见的为DES、3DES,AES,加解密速度较快,一般用作大数据量加密,比如接口数据。密钥管理安全性较低,属于双向加密。

        非对称加密,一般使用两个密钥来进行加密和解密,常用算法RSA,ECC,Elgmal,背包算法,Rabin, D-H该类型加密加解密算法耗时长,适合小数据量加解密或数据签名。

        其它如PGP加密等

实现         MD5/SHA1

        SAP中MD5加密输出32位大写MD5 hash值,如下示例,类中其它方法可对文件流进行散列运算(可用作验证文件是否被篡改)。algorithm设置为'SHA1' 即为使用SHA1算法,SHA1比MD5安全性更高

DATA if_algorithm TYPE string. DATA if_data TYPE string. DATA if_length TYPE i. DATA ef_hashstring TYPE string. DATA ef_hashxstring TYPE xstring. DATA ef_hashb64string TYPE string. DATA ef_hashx TYPE xstring. if_data = '123456'. TRY. cl_abap_message_digest=>calculate_hash_for_char( EXPORTING if_algorithm = 'MD5' if_data = if_data if_length = 0 IMPORTING ef_hashstring = ef_hashstring ef_hashxstring = ef_hashxstring ef_hashb64string = ef_hashb64string ef_hashx = ef_hashx ). CATCH cx_abap_message_digest . ENDTRY. WRITE:/ ef_hashstring. WRITE:/ ef_hashxstring. WRITE:/ ef_hashb64string. WRITE:/ ef_hashx.

        如果系统没有上述方法,可以使用函数MD5_CALCULATE_HASH_FOR_CHAR或CALCULATE_HASH_FOR_CHAR。

HMAC

        对比MD5和SHA1增加了密钥,算法可选MD5/SHA1等,示例如下

DATA if_algorithm TYPE string. DATA if_key TYPE xstring. DATA if_data TYPE string. DATA if_length TYPE i. DATA ef_hmacstring TYPE string. DATA ef_hmacxstring TYPE xstring. DATA ef_hmacb64string TYPE string. if_data = '123456'. if_key = '31'. " 字符对应16进制字符串 TRY. cl_abap_hmac=>calculate_hmac_for_char( EXPORTING if_algorithm = 'SHA1' " 加密算法 if_key = if_key " 十六进制密钥 if_data = if_data if_length = 0 IMPORTING ef_hmacstring = ef_hmacstring ef_hmacxstring = ef_hmacxstring ef_hmacb64string = ef_hmacb64string ). CATCH cx_abap_message_digest . ENDTRY. WRITE:/ ef_hmacstring. WRITE:/ ef_hmacxstring. WRITE:/ ef_hmacb64string.

        如果系统没有上述方法,可以使用函数CALCULATE_HMAC_FOR_CHAR

DES/3DES/AES

        DES 分组加密,以 64 位为分组对数据加密,密钥长度64位,其中56 位有效密钥和8位奇偶校验。

        3DES 是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次DES加密,强度更高,由于3DES加密是使用三组密钥分别对前一步数据进行DES加密,解密,加密操作,因此如果三组密钥相同,则相当于DES加密。

        AES 采用 对称分组密码体制,密钥长度支持 128 位、 192 位、256 位,分组长度 128 位,具有更高安全性。是下一代的加密算法标准,速度快,安全级别高。

        DES加密暂无资源,3DES加密的实现有根据算法原理使用ABAP复现加密的资源,参考博客

3DES对称加密算法(ABAP 语言实现版) - 江正军 - 博客园

        标准类cl_sec_sxml_writer中有3DES(TripleDES)加密,AES加密的方法,可参考博客file-encryption-and-decryption,其中加密模式CBC,填充模式未知,偏移量参数也未知。另外AES加密git地址 :ABAP-AES-git  ;由于部分在线3DES加密输出的base64串中带salt,两种加密方式均未在线验证成功。标准方法3DES加密示例如下

DATA: lv_data TYPE string, lv_data_xstr TYPE xstring, lv_key_xstr TYPE xstring, lv_key_str TYPE string, lv_en_xstr TYPE xstring, lv_de_xstr TYPE xstring, lv_de_str TYPE string, lv_en_str TYPE string. lv_data = '1234'. lv_data_xstr = cl_bcs_convert=>string_to_xstring( iv_string = lv_data iv_codepage = '4110' ). lv_key_xstr = cl_sec_sxml_writer=>generate_key( algorithm = cl_sec_sxml_writer=>co_tdes_algorithm ). WRITE: / lv_data_xstr. WRITE: / lv_key_xstr. WRITE: / lv_key_str. TRY. cl_sec_sxml_writer=>encrypt( EXPORTING plaintext = lv_data_xstr key = lv_key_xstr algorithm = cl_sec_sxml_writer=>co_tdes_algorithm IMPORTING ciphertext = lv_en_xstr ). CATCH cx_root. ENDTRY. TRY. cl_sec_sxml_writer=>decrypt( EXPORTING ciphertext = lv_en_xstr key = lv_key_xstr algorithm = cl_sec_sxml_writer=>co_tdes_algorithm IMPORTING plaintext = lv_de_xstr ). CATCH cx_root. ENDTRY. lv_de_str = cl_bcs_convert=>xstring_to_string( iv_xstr = lv_de_xstr iv_cp = '4110' ). WRITE: / lv_de_xstr. WRITE: / lv_de_str.

        PS:基于3DES加密和DES加密的原理,理论上3DES加密能够实现,DES加密也可以实现

RSA

        RSA加密算法为目前最有影响力的公钥加密算法,ABAP中有两种实现方式,一种是基于算法原理的ABAP版本的加密实现,另一种直接上传密钥文件,使用函数SSFW_KRN_ENVELOPE加密,函数SSFW_KRN_SIGN生成签名。

        参考博客:RSA加解密

        以上两种形式的RSA加解密均已验证且可以在和外部系统对接中使用,只是需要注意PKCS版本。

        其中基于加密原理实现的方法看起来比较吃力,感兴趣的可以了解下相关知识,链接附后;这里简单说明下密钥,公钥私钥实际上是基于数学原理产生的整数对,根据DER编码规则生成对应的十六进制数据,最后对十六进制数据base64处理。

        RSA算法原理

        RSA密钥格式解析

        DER编码规则

        RSA大数运算

        PKCS规范自行查找

        标准函数的使用参考函数组中的单元测试类扩展使用方法。由于效率问题,相对来说建议使用SM69命令来实现RSA的加密,而不是ABAP版本的RSA加解密。

PGP

        采用公开密钥加密与传统密钥加密相结合的一种加密技术,无标准方法,GIT代码有PGP-git

博客https://blogs.sap.com/2020/05/01/using-pgp-encryption-in-abap-program/中提到了标准webservice解决,需要PI/PO平台或者cloud版本才能支持,实际使用时为SM69命令结合脚本。

其它

        BASE64 在sap系统中比较广泛,标准api很多,有方法cl_http_utility=>if_http_utility~encode_base64,cl_http_utility=>if_http_utility~decode_base64;function scms_base64_encode_str ,scms_base64_decode_str等。

        CRC32 循环冗余校验,验证数据正确性 方法cl_abap_zip=>crc32

        urlEncode  方法cl_http_utility=>if_http_utility~escape_url或escape( val = iv_urlstring format = cl_abap_format=>e_uri_full ).

        hard wired 加密

DATA: lo_encryptor TYPE REF TO cl_hard_wired_encryptor, string TYPE string, string_en TYPE string, string_de TYPE string. CREATE OBJECT lo_encryptor. string = '123456'. TRY. string_en = lo_encryptor->encrypt_string2string( string ). CATCH cx_encrypt_error. ENDTRY. WRITE:/ string_en. TRY. string_de = lo_encryptor->decrypt_string2string( string_en ). CATCH cx_encrypt_error. ENDTRY. WRITE:/ string_de.

        其它使用的xstring,string的转换类如cl_bcs_convert 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有