قراءة كلمة السر من الأمراض المنقولة جنسيا :: [سن]
-
06-07-2019 - |
سؤال
ولست بحاجة لقراءة كلمة مرور من اللغة الفصحى وأراد std::cin
لا أن أردد الأحرف المكتوبة من قبل المستخدم ...
وكيف يمكنني تعطيل صدى من الأمراض المنقولة جنسيا :: CIN؟
وهنا هو رمز بأنني أستخدم حاليا:
string passwd;
cout << "Enter the password: ";
getline( cin, passwd );
وأنا أبحث عن وسيلة OS الملحد للقيام بذلك. هنا هناك طرق للقيام بذلك في كل من ويندوز و* لا شىء.
المحلول
و @wrang-wrang الإجابة كانت جيدة حقا، ولكن لم تفي احتياجات بلدي، وهذا هو ما قانون بلدي النهائي (الذي يقوم على <لأ href = "http://www.codeguru.com/forum/showthread.php ؟ ر = 466009 "يختلط =" noreferrer "> هذا ) تبدو مثل:
#ifdef WIN32
#include <windows.h>
#else
#include <termios.h>
#include <unistd.h>
#endif
void SetStdinEcho(bool enable = true)
{
#ifdef WIN32
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
if( !enable )
mode &= ~ENABLE_ECHO_INPUT;
else
mode |= ENABLE_ECHO_INPUT;
SetConsoleMode(hStdin, mode );
#else
struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
if( !enable )
tty.c_lflag &= ~ECHO;
else
tty.c_lflag |= ECHO;
(void) tcsetattr(STDIN_FILENO, TCSANOW, &tty);
#endif
}
<ع> استخدام عينة:
#include <iostream>
#include <string>
int main()
{
SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);
std::cout << password << std::endl;
return 0;
}
نصائح أخرى
لا يوجد شيء في هذا المعيار لذلك.
في يونكس، هل يمكن كتابة بعض بايت السحرية اعتمادا على نوع المحطة الطرفية.
استخدم getpasswd إذا كان متوفرا .
ويمكنك نظام /usr/bin/stty -echo
() لتعطيل صدى، و/usr/bin/stty echo
لتمكينه (مرة أخرى، على يونيكس).
هذا الرجل يشرح كيفية القيام بذلك دون استخدام "stty". لم أحاول بنفسي.
إذا كنت لا تهتم حول قابلية، يمكنك استخدام _getch()
في VC
.
#include <iostream>
#include <string>
#include <conio.h>
int main()
{
std::string password;
char ch;
const char ENTER = 13;
std::cout << "enter the password: ";
while((ch = _getch()) != ENTER)
{
password += ch;
std::cout << '*';
}
}
وهناك أيضا getwch()
لwide characters
. نصيحتي هي أن استخدام NCurse
الذي يتوفر في أنظمة *nix
أيضا.
وفكرة فقط ما لدي، هل يمكن قراءة حرف كلمة المرور عن طريق شار، وبعد ذلك فقط طباعة مسافة للخلف ( "\ ب") وربما '*'.