Encryption 如何在SAP中使用加密

Encryption 如何在SAP中使用加密,encryption,aes,sap,Encryption,Aes,Sap,SAP服务器能够加密和散列数据。但似乎没有合适的API可供调用。SAP Note 1456433讨论了类CL_SEC_SXML_XENCRYPTION。基本加密的签名显然是针对SSF的,不适合基本私钥加密/解密。我不想要/不需要信封和用户证书。只有私钥 我在GitHub上找到了一个AES库,并对其进行了调整以适合我们。但是它非常慢。我想使用SAP的加密库。显然,这些库是存在的,但找到一个适当公开的API似乎是个问题 有人知道如何在SAP中使用基本加密吗? 在SAP ABAP堆栈中,使用ABAP。

SAP服务器能够加密和散列数据。但似乎没有合适的API可供调用。SAP Note 1456433讨论了类CL_SEC_SXML_XENCRYPTION。基本加密的签名显然是针对SSF的,不适合基本私钥加密/解密。我不想要/不需要信封和用户证书。只有私钥

我在GitHub上找到了一个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填料和盐的地方 或者需要初始化向量。 SAP提供加密IV但不提供解密IV。为什么???? 因此,您无法使用该工具并保持法规遵从性: 不经静脉注射使用AES-CBC是不安全的。 SAP为什么要这么做

加密IV而不是加密但不解密IV

提供添加填充但不删除填充。好的,你自己把填充物去掉,没什么大不了的。它就像是另一个方向的图书馆

所以我可以用这个工具加密,但不能解密。 我的主要问题是快速解密从移动设备发送的字符串。
因此仍然需要使用旧的ABAP代码:

我有类似的要求,我找到了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系统上对其进行了测试。

我获得了ENCRYPT_IV方法,与CL_SEC_SXML_WRITER类的方法DECRYPT一起工作

这里需要注意的是,我没有使用类cl_abap_conv_out_ce生成对称密钥和IV

我已经有了Java实现测试中的密钥和IV

我唯一需要的是将Key和IV创建为XSTRING,并使用我的Java实现的十六进制格式初始化它们,它们是字节格式的


因此,我首先将它们转换为十六进制,并将这些值传递给ABAP Xstring类型。

数据是否需要在SAP系统中加密?还是你想保护传输?我真的不明白这个问题。ABAP在SAP系统上运行,而不是在客户端上运行。您是否希望加密SAP系统上的数据并将其发送到另一个SAP系统?也许这个问题与Bryan的问题是一样的,但我的印象是,如果你在用户空间ABAP中公开一个私钥,你就不应该再期望那个密钥是私钥了。ABAP有一个安全的存储转发系统和API,我建议您进一步研究——是的,它用于ABAP堆栈。我看过SSF库。它们都假定文档、信封、证书等不公开底层加密API。至少我找不到它。那么,我想你只能使用客户开发的OSS库,就像你找到的那个。您可能还想研究从ABAP调用命令行程序的选项,这将允许您使用几乎任何您想要的东西。我仍然建议不要在安全存储或SSF框架之外的ABAP运行时中管理私钥。它不是为这个目的设计的。用户的私钥是加密的。SAP系统本身有一个用于加密用户私钥的私钥。当然,如果SAP正确地公开了该功能,那么这一切都不是必需的。该类甚至有PKCS7_填充方法。有些我已经准备好测试了