• Solution Manager Key


    *-------------------------------------------------------------
    * Report  Z_GENR_SL_KEY
    *-------------------------------------------------------------

    REPORT Z_GENR_SL_KEY.
    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

     

  • 相关阅读:
    WeChall_Training: ASCII (Training, Encoding)
    WeChall_Prime Factory (Training, Math)Training: WWW-Robots (HTTP, Training)
    WeChall_Training: Crypto
    WeChall_ Training: Stegano I (Training, Stegano)
    WeChall_Training: Get Sourced (Training)
    WeChall_Prime Factory (Training, Math)
    [loj3246]Cave Paintings
    [luogu5423]Valleys
    [loj3247]Non-Decreasing Subsequences
    [luogu5426]Balancing Inversions
  • 原文地址:https://www.cnblogs.com/westmoon/p/2720725.html
Copyright © 2020-2023  润新知