SAP服务器能够加密和散列数据。但似乎没有合适的API可以调用。 SAP Note 1456433讨论了类CL_SEC_SXML_XENCRYPTION
。基本加密的签名明显面向SSF,不适合基本私钥加密/解密。我不想要/需要信封和用户证书。只需私钥。
我在GitHub AES library in ABAP上找到了一个AES库并调整了它以适合我们。但它很慢。我想使用SAP拥有的加密库。显然,库存在但是找到适当暴露的API似乎是个问题。
有人知道如何在SAP中使用基本加密吗?
在SAP ABAP堆栈中,使用ABAP。
例如(使用AES-CBC 128的呼叫,使用PKCS7填充
其中只需要私钥和要加密的数据。例如:
public static method encrypt_xstring
importing i_key type xstring
i_data type xstring
i_initialization_vector type xstring optional
i_padding_standard type char10 optional
i_encryption_mode type char10 optional
exporting e_data type xstring
用例是使用私钥加密客户端上的数据并将数据发送到SAP系统。源支持私钥和AES-CBC等库。 我们加密数据交换工作。 下一步是使用受支持且速度更快的库。
编辑:如果有人需要在abap中正确加密/解密 正在寻找答案。使用CL_SEC_SXML_WRITER类。 CL_SEC_SXML_WRITER正是我想要的 但SAP没有正确曝光它。它仅对加密无解密有用。
与外部库交互时。使用PKCS7填充和SALT的地方 或初始化向量是必需的。 SAP提供ENCRYPT_IV但没有Decrypt_IV。为什么???? 所以你不能使用该工具并保持合规。 :( 没有IV,使用AES-CBC被认为是不安全的。 为什么SAP会这样做?
ENCRYPT_IV而不是ENCRYPT但没有DECRYPT_IV
提供添加填充但不删除填充。确定滚动你自己的填充删除,没什么大不了的。它必须是另一个方向的另一个库。
所以我可以使用该工具加密但不解密。 我的主要问题是快速解密从移动设备发送的字符串。 所以仍然需要使用旧的ABAP代码:(
答案 0 :(得分:1)
我有类似的要求,并且找到了cl_sec_sxml_writer
类。请看下面的例子。请注意,编写器需要XSTRING
参数,这就是为什么我使用转换类。
REPORT zged_aes.
DATA lv_message_string TYPE string.
" create message
DATA(lr_conv_sec) = cl_abap_conv_out_ce=>create( ).
lr_conv_sec->write( data = 'This is my secret' ).
" create key
DATA(lr_conv_key) = cl_abap_conv_out_ce=>create( ).
lr_conv_key->write( data = 'MySymmetricKey' ).
" encrypt using AES256
cl_sec_sxml_writer=>encrypt(
EXPORTING
plaintext = lr_conv_sec->get_buffer( )
key = lr_conv_key->get_buffer( )
algorithm = cl_sec_sxml_writer=>co_aes256_algorithm_pem
IMPORTING
ciphertext = DATA(lv_message) ).
" decrypt message
cl_sec_sxml_writer=>decrypt(
EXPORTING
ciphertext = lv_message
key = lr_conv_key->get_buffer( )
algorithm = cl_sec_sxml_writer=>co_aes256_algorithm_pem
IMPORTING
plaintext = DATA(lv_message_decrypted) ).
" convert xstring to string for output
cl_abap_conv_in_ce=>create( input = lv_message_decrypted)->read( IMPORTING data = lv_message_string ).
" output secret message
WRITE lv_message_string.
我在NetWeaver 7.50 SP 6系统上进行了测试。
答案 1 :(得分:-1)
我将ENCRYPT_IV方法与类CL_SEC_SXML_WRITER的方法DECRYPT一起使用。
这里的警告是,我没有通过使用cl_abap_conv_out_ce类来生成对称密钥和IV。
我已经从Java实施测试中获得了密钥和IV。
我唯一需要做的就是将Key和IV创建为XSTRING并使用Java实现的Hex格式(它们为Byte格式)进行初始化。
因此,我首先将它们转换为十六进制,然后将这些值传递给ABAP Xstring类型。