Защита пароля под звездочками

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShkiperLol, 30 Sep 2010.

  1. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Такой вот вопрос,есть Edit,в него вводиться пароль,заместь паса показываються звездочки.Но звездочки можна легко вскрыть темже Win Spy.Можна ли както защититься от етого?Желательно не прибегать к дополнительным переменным,в которых могбы храниться оригинальный пасс.
     
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Дополнительная переменная, в которой и будет находиться пароль, спасет от этого просмотра. Других вариантов пока что не вижу.
     
  3. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    А переменную ету ведь могут в памяти найти и прочесть ее значение.А если я этой переменной установлю атрибут PAGE_NOACCESS.При помощи дизассемблера ее реально будет вскрыть?
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Один хер пароль всегда можно выдрать. По этому реально лучше всего подменить то что вводишь.
     
  5. flacs

    flacs Member

    Joined:
    28 Jan 2009
    Messages:
    81
    Likes Received:
    31
    Reputations:
    6
    Сразу надо в памяти шифровать, изпользуя дополнительную переменную

    вот код

    Code:
    var
      Form1: TForm1;
      Shifr: string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      case key of
      #8: if Length(Shifr) > 0 then Delete(Shifr, Length(Shifr), 1);
        else
       begin Shifr:=Shifr+chr(byte(Key) xor $27); Key:='*';
       end;
      end;
    end;
    
    procedure TForm1.Edit1Change(Sender: TObject);
    var i: integer;
        bShifr: ^string;
    begin
      Label1.Caption:=Shifr;
      New(bShifr);
        for i:=1 to Length(Shifr) do
          bShifr^:= BShifr^ + chr ( byte(Shifr[i]) xor $27);
          Label2.Caption:=bShifr^;
          ZeroMemory(pointer(integer(bShifr^)), Length(bShifr^));  // чтоб уж наверняка )
      Dispose(bShifr);
    end;