1. Pascal / Говнокод #10064

    +72

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    const 
    zn1 = #60; { < }   
    zn2 = #62; { > } 
    
    function EnCrypt(ds: string): string;
      var 
    k,l,m: string; 
    i,b,g: integer; 
    t: char;
       function Lvs(ds: byte): string;
       begin
        case ds of 
       Byte(zn1): Result:= zn1+zn2;
       Byte(zn2): Result:= zn2+zn1;
             0: if Random(2)=0 then  Result:= zn1+zn1 
                 else Result:= zn2+zn2;
               else 
                 Result:= Chr(ds);end;
       end;
      begin
       if length(ds)=0 then Exit; 
       Randomize;  k:=''; m:='';  b:=1;
     for i:=1 to RandomRange(5,16) do 
      k:= k+Chr(RandomRange(1,256));
       for i:=1 to Length(ds) do  begin 
    g:= Byte(ds[i])xor Byte(k[b]);
       l:= Lvs(g); t:= k[b];
    if i<= Length(k) then m:= m+t+l else m:=m+l;
    Inc(b);
       if b>Length(k) then b:= 1; 
      end; 
    l:= Chr(Length(k))+m;
       for  i:=1 to Length(l) do begin 
    b:= Byte(l[I]) xor i;k:= Lvs(b);
       Result:= Result+k; 
    end;
      end;
    
     function DeCrypt(ds: string): string;
      var 
    k,c,l,n: string; 
    i,b,m: integer; 
    d: boolean;
       function Svl(ds: string; ts: integer): char;
       var t: byte;
       begin
        t:=Byte(ds[1]);
        if ds=zn1+zn2 then t:=Byte(zn1);
        if ds=zn2+zn1 then t:=Byte(zn2);
        if(ds=zn1+zn1) or (ds=zn2+zn2) then t:= 0;
       Result:=Chr(Byte(t xor ts));
       end;
      begin
       if length(ds)=0 then Exit;
     b:=1; i:=1; n:='';
       while i<=Length(ds) do begin c:= ds[i];
       if (ds[i]=zn1)or(ds[i]=zn2)then begin 
    c:=ds[i]+ds[i+1]; Inc(i); end;
       Inc(i);
     n:= n+Svl(c,b); 
    Inc(b); 
    end; c:=''; k:=''; b:=1; i:=1; 
    d:=false;
    m:=Byte(n[1]); 
    Delete(n,1,1);
       while i<=Length(n)do begin 
    if b<=m*2 then begin if d then begin 
    l:=n[i];
      if (n[i]=zn1) or (n[i]=zn2) then 
    begin 
        l:= n[i]+n[i+1]; Inc(i); 
    end;
       c:=c+l; 
    Inc(b);
    d:=false; 
    end else 
    begin 
    k:=k+n[i]; d:=true; Inc(b); 
    end;
       end else begin 
    l:= n[i]; 
    if (n[i]=zn1) or (n[i]=zn2) then 
    begin   l:= n[i]+n[i+1]; Inc(i); end;  
    c:=c+l; end;
     Inc(i); end;
       if length(c)=0 then Exit;
    i:=1;b:=1; 
    while i<=Length(c)do begin 
    l:=c[i];
       if (c[i] = zn1) or (c[i] = zn2) then 
    begin 
    l:= c[i] + c[i+1]; Inc(i); 
    end;
       Inc(i);
    Result:= Result + Svl(l, Byte(k[b]));
    Inc(b);
    if b>Length(k)then b:=1;
       end;
      end;

    В очень далёком 99м году была совершена попытка шифровать и дешифровать пароли пользователей простым ХОР-замесом. Тогда такой способ казался идеальным и оригинальным :) Но посмотрите, если руки не оттуда откуда надо растут, как же можно извратиться, чистый говнокод! До сих пор им пользуюсь, немного. Интересно, ктонить догадается, зачем здесь константные знаки используются?

    Запостил: Alegun, 27 Апреля 2012

    Комментарии (7) RSS

    • Только сейчас дошло, что я сделал - не надо было весь код копипастить, это избыточная инфа, здесь смешной только кусок со смешиванием ключа и шифровки, да так, чтоб нуль не пролез - сильно не бейте, исправлюсь:)
      Ответить
      • Это функция LVS, что ли? Ну да. <>>< А чем нуль плох - это ж паскалевские строки? Да и #60 вместо '<' непонятно зачем.
        Ответить
        • Угу, она самая. На сколько помню, появилась проблема - при записи шифровки в регистр виндов её обрезало, нуль (chr(#0)) не проходил, пришлось изголяться, в этом и весь огород.
          Ответить
    • Стиль расстановки отступов брутален и бессердечен.
      Ответить
      • Было ещё хуже - весь код влезал в 35 строк, так что это ещё слегка разбавленное говнецо :)
        Ответить
    • >В очень далёком 99м году
      >99 end;
      Ответить

    Добавить комментарий