易飞登录密码

        [易飞]用户密码加密解密       

        分类:            ERP-易飞 36人阅读 评论(0) 收藏 举报

经常我们在做外挂为了统易飞ERP的用户和密码。

查看用户表:


密码经过加密:

福州小兵提供了D7版本的加密和解密函数:

  1. unit EnCode_New; 
  2.  
  3. interface 
  4. uses SysUtils, Classes ,Dialogs ; 
  5.  
  6. const 
  7.   FNIL  = '''(&.&!''%&$"''&)" ",&)$(%#$-$#$$" ' ; //NIL值 
  8.   PS1 = '&''$%"# !./,-*+()' ; //密码符 
  9.   FF1 = ' !"#$%&''()*+,-./'; //符号集 
  10.  
  11.   Function EnUser(s:String):string
  12.   //Function DeUser(s:String):string; 
  13.   Function Encode7(EnStr,s:string):string
  14.   Function Decode7(EnStr,s:string):string
  15. implementation 
  16.  
  17. Function EnUser(s:String):string
  18. var n,i,d:integer
  19.  
  20. begin 
  21.   Result := ''
  22.   i := length(s) ; 
  23.   if i<=0 then exit ; 
  24.   Result := Copy(FNIL,(i-1)*2+1, 30-((i-1)*2)) ; 
  25.  
  26.   for n:=i Downto 1 do 
  27.   begin 
  28.     //if n>1 then 
  29.     //  Result := Copy(Result, 3, 30) ; 
  30.     //else 
  31.     //  Result := Copy(Result, 1, 30) 
  32.  
  33.     i := ((Ord(s[n])-32) Mod 16) ; 
  34.     d := ((Ord(s[n])-32) div 16)+1
  35.     Result := Result + CHR(32+d+1) + FF1[i+1] ; 
  36.   end
  37. end
  38.    
  39. Function Encode7(EnStr,s:string):string
  40. var i,n1,n2:integer
  41.     FStr1,FStr2,FStr3:Char ; 
  42.     Fchar1:Char; 
  43. begin 
  44.   Result := EnStr ; 
  45.   IF Length(s)=0 then Exit ; 
  46.   For i:=1 to Length(s) do 
  47.   begin 
  48.     case i of 
  49.       1..4
  50.       begin 
  51.         FStr1 := s[i] ;  //密码符 
  52.         FStr2 := Result[i] ;         //加密位置1 
  53.         FStr3 := Result[32-4+i] ;    //加密位置2 
  54.         n1 := ((Ord(s[i])-32) mod 8) ; 
  55.         n2 := ((Ord(s[i])-32) div 16) ; 
  56.         Fchar1 := Chr(n2*16+32) ; //加密是什么类,数字或字母等 
  57.         //这方法错误 正确的是 两个字符异或,再取其底阶字符+20H 
  58.         n2 := Ord(FStr2) xor Ord(FStr1) ; 
  59.         {Asm
  60.           mov eax, n2
  61.           mov al, 0
  62.           mov n2, eax
  63.         end; } 
  64.         n2 := (n2 AND $0F) + $20//$20= 32 
  65.         FStr2 := Chr(n2) ; 
  66.         FStr3 := Chr(Ord(Fchar1) + ((Ord(FStr3)+Ord(Fchar1)) Mod 16)) ; 
  67.         Result := COPY(Result,1,i-1)+FStr2+COPY(Result,i+1,32-i) ; 
  68.         Result := COPY(Result,1,32-4+i-1)+FStr3+COPY(Result,32-4+i+1,4-i) ; 
  69.       end
  70.       else 
  71.       begin 
  72.         FStr1 := s[i] ;  //密码符 
  73.         FStr2 := Result[i] ;         //加密位置1 
  74.         FStr3 := Result[i-4] ;    //加密位置2 
  75.         n1 := ((Ord(s[i])-32) mod 16) ; 
  76.         n2 := ((Ord(s[i])-32) div 16) ; 
  77.         Fchar1 := Chr(n2*16+32) ; //加密是什么类,数字或字母等 
  78.         n2 := Ord(FStr2) xor Ord(FStr1) ; 
  79.         n2 := (n2 AND $0F) + $20 ; //$20= 32 
  80.         FStr2 := Chr(n2) ; 
  81.         FStr3 := Chr(Ord(Fchar1) + ((Ord(FStr3)+Ord(Fchar1)) Mod 16)) ; 
  82.         Result := COPY(Result,1,i-1)+FStr2+COPY(Result,i+1,32-i) ; 
  83.         Result := COPY(Result,1,i-4-1)+FStr3+COPY(Result, i-4+1, 32-i+4) ; 
  84.       end
  85.     end
  86.   end
  87. end
  88.  
  89.  
  90. Function Decode7(EnStr,s:string):string
  91. var KeyLen,i,n1,n2:integer
  92.     FStr1,FStr2,FStr3,FStr4:Char ; 
  93.     Fchar1:Char; 
  94. begin 
  95.   Result := ''
  96.   IF EnStr='' then Exit ; 
  97.   if Length(s)<32 then //少于32位,错误 
  98.   begin 
  99.     Result := 'ERROR!'
  100.     EXIT; 
  101.   END ; 
  102.   IF s=EnStr then //NIL值 
  103.     EXIT ; 
  104.  
  105.   //检查密码有几位 
  106.   KeyLen:=0
  107.   for i:=10 downto 1 do 
  108.     if s[i]<>EnStr[i] then 
  109.     begin 
  110.       KeyLen:=i ; 
  111.       Break ; 
  112.     end
  113.   if KeyLen=0 then Exit ; 
  114.  
  115.   for i:=KeyLen Downto 1 do 
  116.   begin 
  117.     case i of 
  118.     1..4: begin 
  119.             FStr1 := EnStr[i] ;  //密码符 
  120.             FStr2 := EnStr[32-4+i] ;         //加密位置1 
  121.  
  122.             FStr3 := s[i] ;    //加密位置2 
  123.             FStr4 := s[32-4+i] ;         //加密位置1 
  124.  
  125.             //n2*16+32 + (ord(FStr2) + (n2*16+32)) mod 16 ; 
  126.  
  127.             n1 := ((Ord(s[i])-32) mod 8) ; 
  128.             n2 := ((Ord(s[i])-32) div 16) ; 
  129.             Fchar1 := Chr(n2*16+32) ; //加密是什么类,数字或字母等 
  130.  
  131.             //这方法错误 正确的是 两个字符异或,再取其底阶字符+20H 
  132.  
  133.             n2 := Ord(FStr2) xor Ord(FStr1) ; 
  134.  
  135.             n2 := (n2 AND $0F) + $20 ; //$20= 32 
  136.             FStr2 := Chr(n2) ; 
  137.  
  138.             FStr3 := Chr(Ord(Fchar1) + ((Ord(FStr3)+Ord(Fchar1)) Mod 16)) ; 
  139.  
  140.             Result := COPY(Result,1,i-1)+FStr2+COPY(Result,i+1,32-i) ; 
  141.             Result := COPY(Result,1,32-4+i-1)+FStr3+COPY(Result,32-4+i+1,4-i) ; 
  142.           end
  143.     else begin 
  144.  
  145.          end 
  146.     end
  147.   end
  148. end
  149.  
  150. end
unit EnCode_New;

interface
uses SysUtils, Classes ,Dialogs ;

const
  FNIL  = '''(&.&!''%&$"''&)" ",&)$(%#$-$#$$" ' ; //NIL值
  PS1 = '&''$%"# !./,-*+()' ; //密码符
  FF1 = ' !"#$%&''()*+,-./'; //符号集

  Function EnUser(s:String):string;
  //Function DeUser(s:String):string;
  Function Encode7(EnStr,s:string):string ;
  Function Decode7(EnStr,s:string):string ;
implementation

Function EnUser(s:String):string;
var n,i,d:integer;

begin
  Result := '' ;
  i := length(s) ;
  if i<=0 then exit ;
  Result := Copy(FNIL,(i-1)*2+1, 30-((i-1)*2)) ;

  for n:=i Downto 1 do
  begin
    //if n>1 then
    //  Result := Copy(Result, 3, 30) ;
    //else
    //  Result := Copy(Result, 1, 30)

    i := ((Ord(s[n])-32) Mod 16) ;
    d := ((Ord(s[n])-32) div 16)+1 ;
    Result := Result + CHR(32+d+1) + FF1[i+1] ;
  end;
end;
  
Function Encode7(EnStr,s:string):string ;
var i,n1,n2:integer;
    FStr1,FStr2,FStr3:Char ;
    Fchar1:Char;
begin
  Result := EnStr ;
  IF Length(s)=0 then Exit ;
  For i:=1 to Length(s) do
  begin
    case i of
      1..4:
      begin
        FStr1 := s[i] ;  //密码符
        FStr2 := Result[i] ;         //加密位置1
        FStr3 := Result[32-4+i] ;    //加密位置2
        n1 := ((Ord(s[i])-32) mod 8) ;
        n2 := ((Ord(s[i])-32) div 16) ;
        Fchar1 := Chr(n2*16+32) ; //加密是什么类,数字或字母等
        //这方法错误 正确的是 两个字符异或,再取其底阶字符+20H
        n2 := Ord(FStr2) xor Ord(FStr1) ;
        {Asm
          mov eax, n2
          mov al, 0
          mov n2, eax
        end; }
        n2 := (n2 AND $0F) + $20 ;  //$20= 32
        FStr2 := Chr(n2) ;
        FStr3 := Chr(Ord(Fchar1) + ((Ord(FStr3)+Ord(Fchar1)) Mod 16)) ;
        Result := COPY(Result,1,i-1)+FStr2+COPY(Result,i+1,32-i) ;
        Result := COPY(Result,1,32-4+i-1)+FStr3+COPY(Result,32-4+i+1,4-i) ;
      end;
      else
      begin
        FStr1 := s[i] ;  //密码符
        FStr2 := Result[i] ;         //加密位置1
        FStr3 := Result[i-4] ;    //加密位置2
        n1 := ((Ord(s[i])-32) mod 16) ;
        n2 := ((Ord(s[i])-32) div 16) ;
        Fchar1 := Chr(n2*16+32) ; //加密是什么类,数字或字母等
        n2 := Ord(FStr2) xor Ord(FStr1) ;
        n2 := (n2 AND $0F) + $20 ; //$20= 32
        FStr2 := Chr(n2) ;
        FStr3 := Chr(Ord(Fchar1) + ((Ord(FStr3)+Ord(Fchar1)) Mod 16)) ;
        Result := COPY(Result,1,i-1)+FStr2+COPY(Result,i+1,32-i) ;
        Result := COPY(Result,1,i-4-1)+FStr3+COPY(Result, i-4+1, 32-i+4) ;
      end;
    end;
  end;
end;


Function Decode7(EnStr,s:string):string ;
var KeyLen,i,n1,n2:integer;
    FStr1,FStr2,FStr3,FStr4:Char ;
    Fchar1:Char;
begin
  Result := '' ;
  IF EnStr='' then Exit ;
  if Length(s)<32 then //少于32位,错误
  begin
    Result := 'ERROR!' ;
    EXIT;
  END ;
  IF s=EnStr then //NIL值
    EXIT ;

  //检查密码有几位
  KeyLen:=0 ;
  for i:=10 downto 1 do
    if s[i]<>EnStr[i] then
    begin
      KeyLen:=i ;
      Break ;
    end;
  if KeyLen=0 then Exit ;

  for i:=KeyLen Downto 1 do
  begin
    case i of
    1..4: begin
            FStr1 := EnStr[i] ;  //密码符
            FStr2 := EnStr[32-4+i] ;         //加密位置1

            FStr3 := s[i] ;    //加密位置2
            FStr4 := s[32-4+i] ;         //加密位置1

            //n2*16+32 + (ord(FStr2) + (n2*16+32)) mod 16 ;

            n1 := ((Ord(s[i])-32) mod 8) ;
            n2 := ((Ord(s[i])-32) div 16) ;
            Fchar1 := Chr(n2*16+32) ; //加密是什么类,数字或字母等

            //这方法错误 正确的是 两个字符异或,再取其底阶字符+20H

            n2 := Ord(FStr2) xor Ord(FStr1) ;

            n2 := (n2 AND $0F) + $20 ; //$20= 32
            FStr2 := Chr(n2) ;

            FStr3 := Chr(Ord(Fchar1) + ((Ord(FStr3)+Ord(Fchar1)) Mod 16)) ;

            Result := COPY(Result,1,i-1)+FStr2+COPY(Result,i+1,32-i) ;
            Result := COPY(Result,1,32-4+i-1)+FStr3+COPY(Result,32-4+i+1,4-i) ;
          end;
    else begin

         end
    end;
  end;
end;

end.

模板写个C#版本加密类:

  1. <pre class="csharp" name="code">using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5.  
  6. namespace Utility 
  7.     public class DCENCode 
  8.     { 
  9.         public  string EnUser(char[] s) 
  10.         { 
  11.  
  12.             string fnil = "'(&.&!'%&$\"'&)\" \",&)$(%#$-$#$$\" "
  13.             string FF1 = " !\"#$%&'()*+,-./"
  14.             int n, i, d; 
  15.             string Result; 
  16.             i = s.Length; 
  17.             Result = fnil.Substring((i - 1) * 2, 30 - (i - 1) * 2); 
  18.             for (n = i - 1; n >= 0; n--) 
  19.             { 
  20.                 i = (Convert.ToInt32(s[n]) - 32) % 16; 
  21.                 d = ((Convert.ToInt32(s[n]) - 32) / 16) + 1; 
  22.                 Result = Result + Convert.ToChar(32 + d + 1) + FF1[i]; 
  23.             } 
  24.             return Result; 
  25.         } 
  26.         unsafe public  string Encode7(string EnStr, char[] s) 
  27.         { 
  28.             int i, n1, n2; 
  29.             char FStr1, FStr2, FStr3, Fchar1; 
  30.             string Result = EnStr; 
  31.             for (i = 0; i < s.Length; i++) 
  32.             { 
  33.                 if (i <= 3) 
  34.                 { 
  35.                     FStr1 = s[i]; 
  36.                     FStr2 = Result[i]; 
  37.                     FStr3 = Result[28 + i]; 
  38.                     n1 = ((Convert.ToInt32(s[i]) - 32) % 8); 
  39.                     n2 = ((Convert.ToInt32(s[i]) - 32) / 16); 
  40.                     Fchar1 = Convert.ToChar(n2 * 16 + 32); 
  41.                     n2 = Convert.ToInt32(FStr2) ^ Convert.ToInt32(FStr1); 
  42.                     n2 = (n2 & 0x0F) + 0x20; 
  43.                     FStr2 = Convert.ToChar(n2); 
  44.                     FStr3 = Convert.ToChar(Convert.ToInt32(Fchar1) + ((Convert.ToInt32(FStr3) + Convert.ToInt32(Fchar1)) % 16)); 
  45.                     Result = Result.Substring(0, i) + FStr2 + Result.Substring(i + 1, 31 - i); 
  46.                     Result = Result.Substring(0, 28 + i) + FStr3 + Result.Substring(29 + i, 3 - i); 
  47.                 } 
  48.                 else 
  49.                 { 
  50.                     FStr1 = s[i]; 
  51.                     FStr2 = Result[i]; 
  52.                     FStr3 = Result[i - 4]; 
  53.                     n1 = ((Convert.ToInt32(s[i]) - 32) % 16); 
  54.                     n2 = ((Convert.ToInt32(s[i]) - 32) / 16); 
  55.                     Fchar1 = Convert.ToChar(n2 * 16 + 32); 
  56.                     n2 = Convert.ToInt32(FStr2) ^ Convert.ToInt32(FStr1); 
  57.                     n2 = (n2 & 0x0F) + 0x20; 
  58.                     FStr2 = Convert.ToChar(n2); 
  59.                     FStr3 = Convert.ToChar(Convert.ToInt32(Fchar1) + ((Convert.ToInt32(FStr3) + Convert.ToInt32(Fchar1)) % 16)); 
  60.                     Result = Result.Substring(0, i) + FStr2 + Result.Substring(i + 1, 31 - i); 
  61.                     Result = Result.Substring(0, i - 4) + FStr3 + Result.Substring(i - 3, 35 - i); 
  62.                 } 
  63.             } 
  64.  
  65.             return Result; 
  66.         } 
  67.     } 
  68. </pre><br> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值