Şifre koruması ( 15 )

Arkadaşlar mesela kullanıcı şifre girişi yapıyor diyelim . Şifreyi girerken nasıl gizleriz ? Yani mesela şifre bölümüne selam yazıcak . Biz bunu yazarken ***** olarak gösteriyoruz .

 şifre = "yazbelforum"

şifremiz = input("Şifreyi giriniz : ")

if şifremiz==şifre:
  print("Hoşgeldiniz")

getpass adlı modülü kullanabilirsiniz

Örneğin

from getpass import getpass

print(getpass())

Halil Bey dediğinizi kendiniz denediniz mi? Bende çalışmadı. IDLE ve cmd de denedim ancak istenilen şekilde çalışmıyor.

Bu dediğinizi IDLE da veya cmd’de de yapmak biraz zor gözüküyor ancak tkinter ile yapabilirsiniz.

Şifreyi gizlemek için getpass modülünü kullanabilirsiniz.

if "merhaba" ==  __import__("getpass").getpass():
    print("Hoşgeldiniz.")

Evet şifreyi gizlemek için işe yarıyor ancak *** şeklinde gösteremiyor.

Fark etmez ki, sonuçta şifreyi gizliyor.

Konuyu açan kişinin ihtiyacını karşılıyorsa fark etmez. Ancak kullanışsız bir arayüz sağlıyor, kaç harf yazdığımızı göremiyoruz.

sudo şifresini, github şifresini konsoldan girince de kaç harf girdiğinizi göremiyorsunuz.

Tamam ben sadece konuyu açan kişi **** ile örnek verdiği için söyledim bunu. Yoksa dediğiniz yöntem de bir çözümdür.

Anladım, dediğiniz gizleme işlemini yıldız ile yapmak için başka kütüphaneler kullanmak gerekiyor. Belki curses ile bu işlem yapılabilir, denemedim.

Tkinter kütüphanesi ile bunu yapabilirsiniz. Devam butonuna basıldığında ‘devam’ fonksiyonu çalışacak ve global ‘şifre’ değişkeni kullanıcının girdiği şifreye eşit olacak.

import tkinter as tk

def devam():
    global şifre
    şifre = input_.get()
    root.destroy()

root = tk.Tk()
root.geometry("200x100")
root.resizable(width=False, height=False)
input_ = tk.Entry(show="*")
buton = tk.Button(text="Devam",command = devam)

input_.place(y=10,x=40)
buton.place(y=50,x=80)

Veya curses ile terminal üzerinde de şifrenizi yıldız işareti ile gizleyebilirsiniz. Ancak aşağıdaki kodlara biraz ekleme yapmanız gerekir çünkü terminalin davranışını baştan programlıyorsunuz. Yani karakter silme tuşunu, yön tuşlarını baştan tanımlamanız gerekir.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import curses

stdscr = curses.initscr()

curses.raw()
curses.noecho()

q = -1
x, y = 0, 0
chars = ""


def pass_iste():
    global x
    for i, j in enumerate("password:"):
        stdscr.addstr(y, i, j)
    x = i + 1
    

pass_iste()

while q != ord("q"):
    q = stdscr.getch()
    stdscr.addstr(y, x, "*")
    if q == 10:
        x = 0
        y += 1
        if "merhaba" == chars:
            break
        else:
            stdscr.addstr(y, x, "Şifre yanlış girildi.")
            chars = ""
            y += 1
            pass_iste()
    else:
        chars += chr(q)
    x += 1

curses.endwin()
print("Şifre başarıyla girildi.")

https://docs.python.org/3.8/library/curses.html

https://docs.python.org/3/howto/curses.html

2 Beğeni

stdiomask’ı kullanabilirsiniz.

pip install stdiomask

Kod örneği olarak

import stdiomask
password = stdiomask.getpass()
print(password)