From 7777763f4f1e8ec5822bd0401ed3a5cdf67a94a6 Mon Sep 17 00:00:00 2001 From: Gregor Wolf Date: Mon, 22 Nov 2010 19:52:01 +0000 Subject: [PATCH] Updated ENCRYPT_PASSWORD method in ZCL_EXCEL_COMMON class according to the correction provided by Joachim Wrba https://cw.sdn.sap.com/cw/message/42905#42905 to fix issue #37 git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@53 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049 --- ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk | 102 +++++++++++++++----------------- 1 file changed, 49 insertions(+), 53 deletions(-) diff --git a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk index 79a3721..ff02dce 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk @@ -1,5 +1,5 @@ - - + + class ZCL_EXCEL_COMMON definition public final @@ -10,7 +10,7 @@ public section. class-data C_EXCEL_NUMFMT_OFFSET type INT1 value 164. "#EC NOTEXT . - class-data C_SPRAS_EN type SPRAS value 'EN'. "#EC NOTEXT . + class-data C_SPRAS_EN type SPRAS value 'E'. "#EC NOTEXT . class-data O_CONV type ref to CL_ABAP_CONV_OUT_CE . class-methods GET_FIELDCATALOG @@ -80,14 +80,15 @@ private section. *"* implementation or private method's signature *"* use this source file for any macro definitions you need *"* in the implementation part of the class - - - - - - - - METHOD char2hex. + + + + + + + + + method CHAR2HEX. IF o_conv IS NOT BOUND. o_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' @@ -100,11 +101,11 @@ private section. CALL METHOD o_conv->write( data = i_char ). r_hex+1 = o_conv->get_buffer( ). " x'65' must be x'0065' -ENDMETHOD. +endmethod. - - - + + + method CONVERT_COLUMN2ALPHA. DATA: lo_conv TYPE REF TO cl_abap_conv_in_ce, @@ -126,9 +127,9 @@ ENDMETHOD. endmethod. - - - + + + method CONVERT_COLUMN2INT. DATA: lv_uccpi TYPE i, @@ -156,9 +157,9 @@ endmethod. endmethod. - - - + + + method DATE_TO_EXCEL_STRING. DATA: lv_date_diff TYPE i, lc_date_baseline TYPE d VALUE '19000101'. @@ -167,9 +168,9 @@ endmethod. ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_date_diff ). endmethod. - - - + + + METHOD encrypt_password. DATA lv_curr_offset TYPE i. @@ -180,7 +181,7 @@ endmethod. CONSTANTS: lv_0x7fff TYPE zexcel_pwd_hash VALUE '7FFF', - lv_0x0100 TYPE zexcel_pwd_hash VALUE '0100', + lv_0x0001 TYPE zexcel_pwd_hash VALUE '0001', lv_0xce4b TYPE zexcel_pwd_hash VALUE 'CE4B'. DATA lv_pwd TYPE zexcel_aes_password. @@ -191,31 +192,26 @@ endmethod. lv_curr_offset = lv_pwd_len - 1. WHILE lv_curr_offset GE 0. - lv_curr_char = lv_pwd+lv_curr_offset(1). - lv_curr_hex = zcl_excel_common=>char2hex( lv_curr_char ). + lv_curr_hex = char2hex( lv_curr_char ). + + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). lv_pwd_hash = lv_pwd_hash BIT-XOR lv_curr_hex. - - lv_pwd_hash = ( zcl_excel_common=>shr14( lv_pwd_hash ) BIT-AND lv_0x0100 ) BIT-OR ( zcl_excel_common=>shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). - - SUBTRACT 1 FROM lv_curr_offset. - - ENDWHILE. + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). lv_pwd_hash = lv_pwd_hash BIT-XOR lv_0xce4b. lv_pwd_hash = lv_pwd_hash BIT-XOR lv_pwd_len. WRITE lv_pwd_hash TO r_encrypted_pwd. - ENDMETHOD. - - - + + + method GET_FIELDCATALOG. DATA: lr_data TYPE REF TO data, @@ -240,9 +236,9 @@ ENDMETHOD. endmethod. - - - + + + method NUMBER_TO_EXCEL_STRING. DATA: lv_value_c TYPE c LENGTH 100. @@ -257,10 +253,10 @@ endmethod. ENDIF. endmethod. - - - - METHOD shl01. + + + + method SHL01. DATA: lv_bit TYPE i, @@ -275,12 +271,12 @@ endmethod. ENDDO. SET BIT 16 OF r_pwd_hash TO 0. -ENDMETHOD. +endmethod. - - - - METHOD shr14. + + + + method SHR14. DATA: lv_bit TYPE i, @@ -302,11 +298,11 @@ ENDMETHOD. SET BIT 1 OF r_pwd_hash TO 0. ENDDO. -ENDMETHOD. +endmethod. - - - + + + method TIME_TO_EXCEL_STRING. DATA: lv_seconds_in_day TYPE i, lv_day_fraction TYPE f,