DATA:
lt_data TYPE string_t,
lv_data TYPE string,
lv_str TYPE string.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = p_path
filetype = 'ASC'
CHANGING
data_tab = lt_data
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
LOOP AT lt_data INTO lv_str.
IF lv_data IS INITIAL.
lv_data = lv_str.
ELSE.
lv_data = |{ lv_data }{ cl_abap_char_utilities=>newline }{ lv_str }|.
ENDIF.
ENDLOOP.
DATA:
lv_key TYPE xstring.
lv_key = cl_sec_sxml_writer=>generate_key( algorithm = cl_sec_sxml_writer=>co_aes128_algorithm ).
DATA:
lv_data_xstr TYPE xstring,
lv_msg TYPE xstring.
"Converting the data - From string format to xstring. You can use any other method or function module which converts the string to xstring format
lv_data_xstr = cl_bcs_convert=>string_to_xstring(
iv_string = lv_data " Input data
).
"Encrypt the data using the key
cl_sec_sxml_writer=>encrypt(
EXPORTING
plaintext = v_data
key = v_key
algorithm = cl_sec_sxml_writer=>co_aes128_algorithm
IMPORTING
ciphertext = lv_msg ).
DATA:
lv_str TYPE string.
CONSTANTS:
lc_filepath TYPE string VALUE '\\PGRDEV\sapmnt\trans\file_after_encryption.txt"
lv_str = lv_msg.
"Split at 132 position
CALL FUNCTION 'CONVERT_STRING_TO_TABLE'
EXPORTING
i_string = lv_str
i_tabline_length = 132
TABLES
et_table = lt_str.
OPEN DATASET lc_filepath IN TEXT MODE FOR OUTPUT ENCODING DEFAULT.
"Loop at all the line
LOOP AT lt_str INTO lv_str.
TRANSFER lv_str TO lc_filepath.
ENDLOOP.
CLOSE DATASET lc_filepath.
DATA:
lv_str TYPE string,
lv_data TYPE string.
CONSTANTS:
lc_filepath TYPE string VALUE '\\PGRDEV\sapmnt\trans\file_after_encryption.txt'.
OPEN DATASET lc_filepath FOR INPUT IN TEXT MODE ENCODING DEFAULT.
DO.
READ DATASET lc_filepath INTO lv_str.
IF sy-subrc NE 0.
EXIT.
ENDIF.
lv_data = |{ lv_data }{ lv_str }|.
ENDDO.
DATA:
lt_binary TYPE STANDARD TABLE OF x255.
DATA:
lv_message_decrypted TYPE xstring,
lv_str TYPE string,
lv_key TYPE xstring,
lv_data_xstr TYPE xstring,
lv_data_text TYPE string,
lv_length TYPE i.
"Received key - As already discussed the key has been shared with the cocern person. The key has been assign here so that we can decrypt the file
lv_key = '38451B52187A3A4AECA26B27AE79D147'
"Assign the encrypted data derived in previous step to to xstring data object so that the same can be decrypted
lv_data_xstr = lv_data.
"Decrypt message
cl_sec_sxml_writer=>decrypt(
EXPORTING
ciphertext = lv_data_xtr
key = lv_key
algorithm = cl_sec_sxml_writer=>co_aes128_algorithm
IMPORTING
plaintext = lv_message_decrypted ).
"LV_MESSAGE_DECRYPTED data object now contains the decrypted data in xstring format. So, to make as human readable, we have to convert the xstring to string.
"Convert xstring to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_message_decrypted
IMPORTING
output_length = lv_length
TABLES
binary_tab = lt_binary.
"Binary to string
CALL FUNCTION 'SCMS_BINARY_TO_STRING'
EXPORTING
input_length = lv_length
IMPORTING
text_buffer = lv_data_text
TABLES
binary_tab = lt_binary
EXCEPTIONS
failed = 1
OTHERS = 2.
*&---------------------------------------------------------------------*
*& Report ZFILE_ENCRYPTION
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zfile_encryption.
PARAMETERS:
p_path TYPE string OBLIGATORY LOWER CASE.
*----------------------------------------------------------------------*
* CLASS lcl_encryption DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_encryption DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
select_file,
upload_file
RAISING cx_bcs,
encrypt_file,
send_email.
CONSTANTS:
c_filepath TYPE string VALUE '\\PGRDEV\sapmnt\trans\encrypted_file.txt'.
PRIVATE SECTION.
CLASS-DATA:
v_data TYPE xstring,
v_key TYPE xstring.
ENDCLASS. "lcl_encryption DEFINITION
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
"Select file
lcl_encryption=>select_file( ).
START-OF-SELECTION.
"Upload file
lcl_encryption=>upload_file( ).
"Encrypted file
lcl_encryption=>encrypt_file( ).
*----------------------------------------------------------------------*
* CLASS lcl_test IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_encryption IMPLEMENTATION.
METHOD select_file.
DATA:
lt_file TYPE filetable,
ls_file TYPE file_table,
lv_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
CHANGING
file_table = lt_file
rc = lv_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc EQ 0.
READ TABLE lt_file INTO ls_file INDEX 1.
IF sy-subrc EQ 0.
p_path = ls_file.
ENDIF.
ENDIF.
ENDMETHOD. "upload_file
METHOD upload_file.
DATA:
lt_data TYPE string_t,
lv_data TYPE string,
lv_str TYPE string.
CLEAR v_data.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = p_path
filetype = 'ASC'
CHANGING
data_tab = lt_data
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
LOOP AT lt_data INTO lv_str.
IF lv_data IS INITIAL.
lv_data = lv_str.
ELSE.
lv_data = |{ lv_data }{ cl_abap_char_utilities=>newline }{ lv_str }|.
ENDIF.
ENDLOOP.
"Convert to xstring
v_data = cl_bcs_convert=>string_to_xstring(
iv_string = lv_data " Input data
).
ENDMETHOD. "upload_file
METHOD encrypt_file.
DATA:
lt_str TYPE string_t,
lv_str TYPE string,
lv_msg TYPE xstring.
v_key = cl_sec_sxml_writer=>generate_key( algorithm = cl_sec_sxml_writer=>co_aes128_algorithm ).
"encrypt using AES256
cl_sec_sxml_writer=>encrypt(
EXPORTING
plaintext = v_data
key = v_key
algorithm = cl_sec_sxml_writer=>co_aes128_algorithm
IMPORTING
ciphertext = lv_msg ).
lv_str = lv_msg.
"Split at 132 position
CALL FUNCTION 'CONVERT_STRING_TO_TABLE'
EXPORTING
i_string = lv_str
i_tabline_length = 132
TABLES
et_table = lt_str.
OPEN DATASET c_filepath IN TEXT MODE FOR OUTPUT ENCODING DEFAULT.
"Loop at all the line
LOOP AT lt_str INTO lv_str.
TRANSFER lv_str TO c_filepath.
ENDLOOP.
CLOSE DATASET c_filepath.
"Send email
send_email( ).
MESSAGE 'File saved in AL11' TYPE 'I'.
ENDMETHOD. "encrypt_file
METHOD send_email.
CONSTANTS:
lc_subject TYPE so_obj_des VALUE 'Encryption key',
lc_raw TYPE char03 VALUE 'RAW'.
DATA:
lr_send_request TYPE REF TO cl_bcs,
lr_bcs_exception TYPE REF TO cx_bcs,
lr_recipient TYPE REF TO if_recipient_bcs,
lr_sender TYPE REF TO cl_sapuser_bcs,
lr_document TYPE REF TO cl_document_bcs.
DATA:
lv_mlrec TYPE so_obj_nam,
lv_sent_to_all TYPE os_boolean,
lv_email TYPE adr6-smtp_addr,
lv_subject TYPE so_obj_des,
lv_str TYPE string,
lv_text TYPE bcsy_text.
TRY.
"Create send request
lr_send_request = cl_bcs=>create_persistent( ).
"Email FROM...
lr_sender = cl_sapuser_bcs=>create( sy-uname ).
"Add sender to send request
CALL METHOD lr_send_request->set_sender
EXPORTING
i_sender = lr_sender.
"Email TO...
lv_email = 'testing@testing.com'.
lr_recipient = cl_cam_address_bcs=>create_internet_address( lv_email ).
"Add recipient to send request
CALL METHOD lr_send_request->add_recipient
EXPORTING
i_recipient = lr_recipient
i_express = 'X'.
"Email BODY
lv_str = |Encryption key :{ v_key }|.
APPEND lv_str TO lv_text.
lr_document = cl_document_bcs=>create_document(
i_type = lc_raw
i_text = lv_text
i_length = '12'
i_subject = lc_subject ).
"Add document to send request
CALL METHOD lr_send_request->set_document( lr_document ).
"Send email
CALL METHOD lr_send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = lv_sent_to_all ).
IF lv_sent_to_all = 'X'.
WRITE 'Email sent!'.
ENDIF.
"Commit to send email
COMMIT WORK.
"Exception handling
CATCH cx_bcs INTO lr_bcs_exception.
WRITE:
'Error!',
'Error type:',
lr_bcs_exception->error_type.
ENDTRY.
ENDMETHOD. "send_email
ENDCLASS. "lcl_test IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Report ZFILE_ENCRYPTION
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zfile_decryption.
PARAMETERS:
p_key TYPE string OBLIGATORY LOWER CASE.
*----------------------------------------------------------------------*
* CLASS lcl_encryption DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_decryption DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
read_file,
decrypt_file,
download_file.
CONSTANTS:
c_filepath TYPE string VALUE '\\PGRDEV\sapmnt\trans\encrypted_file.txt'.
PRIVATE SECTION.
CLASS-DATA:
v_data TYPE xstring,
v_data_text TYPE string,
v_key TYPE xstring.
ENDCLASS. "lcl_encryption DEFINITION
START-OF-SELECTION.
"Upload file
lcl_decryption=>read_file( ).
"Decryptfile
lcl_decryption=>decrypt_file( ).
"Download file
lcl_decryption=>download_file( ).
*----------------------------------------------------------------------*
* CLASS lcl_test IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_decryption IMPLEMENTATION.
METHOD read_file.
DATA:
lv_str TYPE string,
lv_data TYPE string.
v_key = p_key.
OPEN DATASET c_filepath FOR INPUT IN TEXT MODE ENCODING DEFAULT.
DO.
READ DATASET c_filepath INTO lv_str.
IF sy-subrc NE 0.
EXIT.
ENDIF.
lv_data = |{ lv_data }{ lv_str }|.
ENDDO.
v_data = lv_data.
ENDMETHOD. "upload_file
METHOD decrypt_file.
DATA:
lt_binary TYPE STANDARD TABLE OF x255.
DATA:
lv_message_decrypted TYPE xstring,
lv_str TYPE string,
lv_length TYPE i.
"Decrypt message
cl_sec_sxml_writer=>decrypt(
EXPORTING
ciphertext = v_data
key = v_key
algorithm = cl_sec_sxml_writer=>co_aes128_algorithm
IMPORTING
plaintext = lv_message_decrypted ).
"Convert xstring to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_message_decrypted
IMPORTING
output_length = lv_length
TABLES
binary_tab = lt_binary.
"Binary to string
CALL FUNCTION 'SCMS_BINARY_TO_STRING'
EXPORTING
input_length = lv_length
IMPORTING
text_buffer = v_data_text
TABLES
binary_tab = lt_binary
EXCEPTIONS
failed = 1
OTHERS = 2.
ENDMETHOD. "upload_file
METHOD download_file.
DATA:
lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lt_string TYPE string_t.
"File save dialog
CALL METHOD cl_gui_frontend_services=>file_save_dialog
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
APPEND v_data_text TO lt_string.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = lv_fullpath
filetype = 'ASC'
CHANGING
data_tab = lt_string
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
ENDMETHOD. "download_file
ENDCLASS. "lcl_test IMPLEMENTATION
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
8 | |
5 | |
4 | |
4 | |
4 | |
3 | |
2 | |
2 | |
2 | |
2 |