题目:运用你熟悉的软件开发环境设计一个登录系统,实现如下要求: (1)运用随机数salt(验证码)来扰乱攻击者实施的机器人暴力来破解口令。(验证码) (2)运用任意一种哈希算法(MD5等)实现密文匹配,以防止数据库系统管理员见到明文密码口令。建议:用哈希链法,即注册时,产生一个随机数n,然后用MD5(...n-1次(MD5(PW)))共哈希n次。 (3)有三个页面,登录页面,主页面(内容任意),注册页面中运用哈希链法的方式处理密码口令。登录时,从数据库中取出n和哈希值,将密码口令文本框中输入的PW哈希n次,然后和数据库中的哈希值比较,若匹配成,进入主页面。
时间: 2023-06-10 14:04:42 浏览: 57
很好的问题!对于这个要求,我们可以采用以下步骤来设计一个登录系统:
1. 注册页面:用户在注册页面输入用户名和密码,系统随机生成一个salt(验证码)并将它和用户名和密码组成一个字符串(salt+username+password),然后使用MD5哈希算法对这个字符串进行n次哈希,最终得到一个哈希文本值(hashvalue)和一个随机数n。这个hashvalue和n会被存储在数据库中,以便登录时使用。
2. 登录页面:用户在登录页面输入用户名和密码,系统从数据库中读取与该用户名对应的salt和n值。然后系统将用户输入的密码和salt拼接在一起,进行MD5哈希运算得到新的哈希值。接着,将新的哈希值进行n次哈希,得到最终的哈希文本值(new_hashvalue)。最后,系统将new_hashvalue与数据库中存储的哈希值进行比对,如果相同,则登录成功;否则登录失败。
3. 主页面:用户登录成功后,可以进入主页面并浏览网站的内容。
以上就是一个基本的登录系统实现,其中使用了随机数salt来扰乱攻击者实施的机器人暴力来破解口令,同时使用了哈希链法来加密密码口令以防止数据库系统管理员见到明文密码口令。希望这个回答对您有帮助!
相关问题
你能用c语言给我写段代码么,功能要求:获得一个0到1之间的随机数
当然可以!以下是一个用C语言生成0到1之间随机数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// 设置随机数种子
srand(time(0));
// 生成0到1之间的随机数
double randomNum = (double)rand() / RAND_MAX;
printf("随机数: %f\n", randomNum);
return 0;
}
```
这段代码使用了`rand()`函数来生成一个随机整数,然后将其除以`RAND_MAX`得到0到1之间的随机小数。`srand()`函数用于设置随机数种子,以便每次运行程序时生成不同的随机数序列。最后,通过`printf()`函数将生成的随机数打印出来。
请注意,在使用此代码之前,您需要包含`stdio.h`、`stdlib.h`和`time.h`头文件。
写一串代码:产生10个随机数,范围在[1,100] 使用Math.random()来实现
### 回答1:
for(var i=0; i<10; i++){
var randomNumber = Math.floor(Math.random()*100)+1;
console.log(randomNumber);
}
### 回答2:
以下是使用Math.random()函数生成10个范围在[1,100]的随机数的代码:
```java
public class RandomNumberGenerator {
public static void main(String[] args) {
int[] randomNumbers = new int[10]; // 创建一个长度为10的整型数组用于存储随机数
for (int i = 0; i < randomNumbers.length; i++) {
randomNumbers[i] = (int) (Math.random() * 100) + 1; // 通过Math.random()生成范围在[0, 1)的随机数,并乘以100得到范围在[0, 100)的随机数,再加1得到范围在[1, 100]的随机数
}
System.out.println("生成的10个随机数为:");
for (int i : randomNumbers) {
System.out.print(i + " "); // 输出生成的随机数
}
}
}
```
该代码首先创建了一个长度为10的整型数组。然后使用一个循环,循环10次生成10个随机数并存入数组中。每次循环中,通过Math.random()函数生成一个范围在[0,1)的随机数,将其乘以100得到范围在[0,100)的随机数,再加1得到范围在[1,100]的随机数。最后,通过另一个循环遍历数组,并将生成的10个随机数输出到控制台。
### 回答3:
import java.util.Random;
public class RandomNumberGenerator {
public static void main(String[] args) {
int[] randomNumbers = new int[10];
for (int i = 0; i < randomNumbers.length; i++) {
randomNumbers[i] = generateRandomNumber();
System.out.println("随机数 " + (i+1) + ": " + randomNumbers[i]);
}
}
public static int generateRandomNumber() {
Random random = new Random();
int randomNumber = random.nextInt(100) + 1;
return randomNumber;
}
}
以上代码使用Java语言编写,产生了10个范围在[1,100]的随机数。在main方法中,定义了一个长度为10的整型数组randomNumbers用来存储随机数。使用for循环依次生成随机数,并将其存储在数组中。generateRandomNumber方法使用Random类中的nextInt方法产生一个范围在[0,99]的随机整数,并将其加1后返回,保证生成的随机数范围在[1,100]。在控制台输出每个随机数的值。