模拟密码输入:假设数据库中有密码5201314,用户输入一个字符串,显示的时候全都以*出现,然后判断用户输入的字符串是否与数据库中密码相同,若相同,输出“Password Right!”,否则输出 “Password Error!”
时间: 2023-12-24 22:05:05 浏览: 36
可以使用Python代码实现这个功能,具体代码如下:
```python
password = "5201314"
input_str = input("请输入密码:")
if input_str == password:
print("Password Right!")
else:
print("Password Error!")
```
在这段代码中,首先定义了一个变量`password`,表示数据库中的密码。然后使用`input`函数获取用户输入的字符串,并将其赋值给变量`input_str`。为了实现密码输入的模拟,我们不希望用户看到密码的明文,因此需要将其以`*`的形式显示出来。可以使用字符串的`replace`方法将所有字符替换成`*`:
```python
input_str = input_str.replace(input_str, "*" * len(input_str))
```
这里的`len(input_str)`表示用户输入的字符串长度,使用`*`乘以这个长度即可得到相应数量的`*`。
最后,使用`if`语句判断用户输入的字符串是否等于数据库中的密码,并根据判断结果输出相应的信息。
相关问题
汇编语言程序设计,模拟密码输入:假设数据库中有密码5201314,用户输入一个字符串,显示的时候全都以*出现,然后判断用户输入的字符串是否与数据库中密码相同,若相同,输出“Password Right!”,否则输出 “Password Error!”
汇编语言程序实现密码输入模拟可以分为以下几个步骤:
1. 从键盘读入用户输入的字符串;
2. 将用户输入的字符串以`*`替换明文;
3. 将替换后的字符串与数据库中的密码进行比较;
4. 根据比较结果输出相应的信息。
下面给出一份使用x86汇编语言实现密码输入模拟的代码,仅供参考:
```assembly
section .data
password db "5201314", 0
input db 50, 0
prompt db "请输入密码:", 0
right db "Password Right!", 0
wrong db "Password Error!", 0
section .text
global _start
_start:
; 输出提示信息
mov eax, 4
mov ebx, 1
mov ecx, prompt
mov edx, 12
int 0x80
; 读入用户输入的字符串
mov eax, 3
mov ebx, 0
mov ecx, input
mov edx, 50
int 0x80
; 替换明文
xor ecx, ecx
mov cl, byte [input + 1] ; 获取用户输入的字符串长度
mov esi, input + 2 ; 将esi指向用户输入的字符串
mov edi, input + 2 ; 将edi指向替换后的字符串
mov bl, '*'
cld
rep stosb
; 比较字符串
mov ecx, 7
mov esi, password
mov edi, input + 2
repe cmpsb
; 输出结果
jne error
mov eax, 4
mov ebx, 1
mov ecx, right
mov edx, 15
int 0x80
jmp exit
error:
mov eax, 4
mov ebx, 1
mov ecx, wrong
mov edx, 15
int 0x80
exit:
; 退出程序
mov eax, 1
xor ebx, ebx
int 0x80
```
在这段代码中,首先定义了一些数据段变量,包括数据库中的密码、用户输入的字符串以及提示信息等。然后使用`int 0x80`调用Linux系统调用实现从键盘读入用户输入的字符串和输出提示信息等功能。
在读入用户输入的字符串后,使用`rep stosb`指令实现字符串替换。`rep stosb`指令是一个重复字符串存储指令,它将`al`寄存器中的值存储到`[edi]`指向的内存地址中,并将`edi`指针自动递增一个字节。`rep`前缀表示重复执行指令,`stosb`表示将一个字节存储到内存中。
最后,使用`repe cmpsb`指令比较替换后的字符串与数据库中的密码是否相同。`repe cmpsb`指令是一个重复比较字符串指令,它将`[esi]`和`[edi]`指向的内存地址中的值进行比较,如果相同,则将`esi`和`edi`指针自动递增一个字节。`repe`前缀表示重复执行指令,直到不相同为止。如果字符串相同,就跳转到输出“Password Right!”的代码;否则输出“Password Error!”的代码。最后使用`int 0x80`调用Linux系统调用实现程序的退出。
用汇编语言模拟密码输入:假设数据库中有密码5201314,用户输入一个字符串,显示的时候全都以*出现,然后判断用户输入的字符串是否与数据库中密码相同,若相同,输出“Password Right!”,否则输出 “Password Error!” 提示:将“Password Right!”、“Password Error!”以及5201314定义为字符串
以下是汇编语言模拟密码输入的示例代码:
```
.model small
.stack 100h
.data
password db '5201314$'
input db 20,?,21 dup('$')
msg_right db 'Password Right!',13,10,'$'
msg_error db 'Password Error!',13,10,'$'
.code
main proc
mov ax, @data
mov ds, ax
; 显示密码输入提示
mov ah, 09h
lea dx, input_prompt
int 21h
; 接收用户输入的密码
mov ah, 0Ah
lea dx, input
int 21h
; 将用户输入的密码转换成大写
mov si, offset input + 2 ; 跳过输入缓冲区前两个字节
mov cx, word ptr [input + 1] ; 获取输入字符串长度
mov bl, 'a' - 'A' ; 计算大小写字母的差值
convert_loop:
cmp cx, 0
je compare_password
mov al, [si]
cmp al, 'a'
jb no_convert
cmp al, 'z'
ja no_convert
sub al, bl
mov [si], al
no_convert:
inc si
dec cx
jmp convert_loop
compare_password:
; 将密码转换成全*
xor si, si
mov di, offset password
mov cx, 0
convert_to_star:
mov al, [di]
cmp al, '$'
je password_compare
mov [si], '*'
inc si
inc di
inc cx
jmp convert_to_star
password_compare:
; 比较密码
mov si, offset input + 2 ; 跳过输入缓冲区前两个字节
mov di, offset password
mov cx, word ptr [input + 1] ; 获取输入字符串长度
compare_loop:
cmp cx, 0
je output_result
mov al, [si]
mov bl, [di]
cmp al, bl
jne output_error
inc si
inc di
dec cx
jmp compare_loop
output_result:
; 输出“Password Right!”
mov ah, 09h
lea dx, msg_right
int 21h
jmp exit_program
output_error:
; 输出“Password Error!”
mov ah, 09h
lea dx, msg_error
int 21h
jmp exit_program
exit_program:
mov ah, 4Ch
xor cx, cx
int 21h
input_prompt db 'Please enter the password:',13,10,'$'
end main
```
注:此代码使用的是DOS汇编语言,需要在DOS环境下运行。