Get solution manager key


An report which helps you to get the sap solution manager key.

*&———————————————————————*
*& Report  ZSMK
*&
*&———————————————————————*
*&
*&得到SOLUTION MANAGER KEY
*&———————————————————————*

REPORT  ZSMK.
types: begin of dswpclientkey,
INSTNO type num10,
DBID(3),
BUNDLE_ID(8),
SERVICE_KEY(40),
end of dswpclientkey.
*data: dswpclientkey_w type standard table of dswpclientkey.
DATA: P_VALUE(10),
P_INSTNO(10).

PARAMETERS: P_SID(3),
P_SYSNO(2),
P_SERVER(15).

START-OF-SELECTION.
PERFORM GET_SP_VALUE USING P_SID
P_SYSNO
P_SERVER
P_INSTNO
CHANGING P_VALUE.

END-OF-SELECTION.
WRITE P_VALUE.
*&———————————————————————*
*&      Form  get_sp_value
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_PF_SID  text
*      –>P_PF_SYSNO  text
*      –>P_PF_SERVER  text
*      <–P_PF_VALUE  text
*———————————————————————-*
FORM get_sp_value USING    P_PF_SID
P_PF_SYSNO
P_PF_SERVER
P_PF_INSTNO
CHANGING P_PF_VALUE.

CONSTANTS: lc_part_len TYPE i VALUE 5,
lc_pw_len   TYPE i VALUE 10,
lc_allowed_chars(38) TYPE c VALUE
‘-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_’.

data: lf_string(20)        type c,
lf_key               type i,
ls_key               type dswpclientkey,
lf_part(lc_part_len) type c,
lf_finalf(lc_pw_len) type c,
lf_finalx            type xstring,
lf_xbuffer           type xstring,
lf_opf(10)           type c,
lf_langu             like sy-langu,
lf_subrc             like sy-subrc,
lf_len               type i,
lo_conv_to_x         TYPE REF TO cl_abap_conv_out_ce.

clear: lf_string, lf_finalx, lf_opf.

concatenate p_pf_sid p_pf_sysno p_pf_server into lf_string.

* Large letters only
translate lf_string to upper case.

lf_langu = sy-langu.
SET LOCALE LANGUAGE ‘E’.
lo_conv_to_x = cl_abap_conv_out_ce=>create( encoding = ’1100′ ).
lf_len = STRLEN( lf_string ).

IF lf_string(lf_len) CN lc_allowed_chars.
else.

* Fold the input string to a lc_part_len long string
WHILE lf_len > 0.
lf_part = lf_string(lc_part_len).
SHIFT lf_string BY lc_part_len PLACES.
lf_len = STRLEN( lf_string ).
CALL METHOD lo_conv_to_x->reset.
CALL METHOD lo_conv_to_x->write( data = lf_part n = -1 ).
lf_xbuffer = lo_conv_to_x->get_buffer( ).
lf_finalx = lf_finalx BIT-XOR lf_xbuffer.
ENDWHILE.

lf_key = 12.

PERFORM scramble USING      lf_finalx
lf_key
lc_part_len
CHANGING lf_finalf
lf_subrc.

if not lf_finalf is initial.
p_pf_value = lf_finalf.
ls_key-dbid        = p_pf_sid.
ls_key-instno      = p_pf_instno.
ls_key-bundle_id   = ‘SM_KEY’.
ls_key-service_key = lf_finalf.
if not p_pf_instno is initial.
*        insert dswpclientkey_w from ls_key.
if sy-subrc <> 0.
*          update dswpclientkey_w from ls_key.
endif.
endif.
else.
clear p_pf_value.
endif.
endif.
ENDFORM.                    ” get_sp_value
*&———————————————————————*
*&      Form  scramble
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_LF_FINALX  text
*      –>P_LF_KEY  text
*      –>P_LC_PART_LEN  text
*      <–P_LF_finalf  text
*      <–P_LF_SUBRC  text
*———————————————————————-*
FORM scramble USING    iv_xstring TYPE xstring
iv_key TYPE i
iv_src_len TYPE i
CHANGING lf_finalf
lf_subrc LIKE sy-subrc.

CONSTANTS: lc_max_len    TYPE i VALUE 20,
lc_mask(4)    TYPE x VALUE ’0000003F’,
lc_random(64) TYPE x VALUE
‘F0ED53B83244F1F876C67959FD4F13A2′ &
‘C15195EC5483C234774943A27DE26596′ &
’5E5398789A17A33CD383A8B829FBDCA5′ &
’55D702778413ACDDF9B83116610E6DFA’.

DATA: lv_key_index(4)  TYPE x,
lv_rand_index(4) TYPE x,
lv_xkey(4)       TYPE x,
lv_xkey_shl_1(4) TYPE x,
lv_xkey_shr_5(4) TYPE x,
lv_scramble_byte TYPE x,
lv_dest(lc_max_len) TYPE x,
lv_index         TYPE i,
lv_len           TYPE i.

CLEAR lf_subrc.

IF iv_src_len EQ 0. EXIT. ENDIF.
lv_len = XSTRLEN( iv_xstring ).
IF iv_src_len GT lc_max_len OR
iv_src_len GT lv_len.
lf_subrc = 2.
EXIT.
ENDIF.

lv_xkey       = iv_key.
lv_xkey_shl_1 = iv_key * 2.
lv_xkey_shr_5 = iv_key DIV 32.
lv_rand_index = lv_xkey BIT-XOR lv_xkey_shr_5 BIT-XOR lv_xkey_shl_1.
lv_rand_index = lv_rand_index BIT-AND lc_mask.

lv_index = 0.
DO iv_src_len TIMES.
CATCH SYSTEM-EXCEPTIONS compute_int_times_overflow = 1.
lv_key_index = ( iv_key * lv_index * lv_index ) – lv_index.
ENDCATCH.
IF sy-subrc <> 0.
lf_subrc = 1.
EXIT.
ENDIF.
lv_scramble_byte = lc_random+lv_rand_index(1) BIT-XOR
lv_key_index+3(1).
lv_dest+lv_index(1) = iv_xstring+lv_index(1) BIT-XOR
lv_scramble_byte.
lv_index = lv_index + 1.
lv_rand_index = lv_rand_index + 1.
lv_rand_index = lv_rand_index BIT-AND lc_mask.
ENDDO.
IF lf_subrc <> 0.
EXIT.
ENDIF.

WRITE lv_dest(iv_src_len) TO lf_finalf.

ENDFORM.                    ” scramble


About The Author

从事SAP行业有些年头,对SAP技术稍有了解; 如无特别声明,本博客文章为原创,转载请注明; 博主MSN:xuchunbo0901@hotmail.com; 博主邮箱:bob.xu@abaptech.com。

1 Comment

  1. 匿名 说道:

    太牛了,非常感谢!!!

Leave A Reply


注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

无觅相关文章插件,快速提升流量