zoukankan      html  css  js  c++  java
  • IDES Solution Manager Key 生成程序

      *&---------------------------------------------------------------------*
    *& Report   ZSLMKEY
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*

    REPORT   ZSLMKEY.

    typesbegin 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(38TYPE 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=>createencoding = '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->writedata = 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(64TYPE x VALUE
                           'F0ED53B83244F1F876C67959FD4F13A2' &
                           'C15195EC5483C234774943A27DE26596' &
                           '5E5398789A17A33CD383A8B829FBDCA5' &
                           '55D702778413ACDDF9B83116610E6DFA'.

       DATA: lv_key_index(4)   TYPE x,
             lv_rand_index(4TYPE x,
             lv_xkey(4)        TYPE x,
             lv_xkey_shl_1(4TYPE x,
             lv_xkey_shr_5(4TYPE 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 0EXITENDIF.
       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(1BIT-XOR
                            lv_key_index+3(1).
         lv_dest+lv_index(1) = iv_xstring+lv_index(1BIT-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
  • 相关阅读:
    jython 访问数据库的方法
    Server 2008安装FTP的简单教程
    如何实现Android重启应用程序代码 ?
    android 应用程序自适应屏幕大小
    Android Dialog用法
    2008Server错误
    7种形式的Android Dialog使用举例
    ADB使用方法
    调用手机震动
    android小记之FTP文件上传
  • 原文地址:https://www.cnblogs.com/elegantok/p/1403568.html
Copyright © 2011-2022 走看看