如何在SAP中使用加密

时间:2018-04-23 12:40:59

标签: encryption aes sap

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代码:(

2 个答案:

答案 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类型。