对输入的密码进行加密。 请从键盘输入一个8位密码。该密码可以包含空格键,但不能包含回车键。输入的密码必须包含大写字母、小写字母、数字和特殊符号。 加密规则为: 1)将数字全部挑选出来,将所有数字在原密码中所处位置(位置分别为1-8)和数字对应的ASCII码值组合成为一个新的字符串1(举例:输入密码SC1a2***,则新字符串为“349550”,3表示字符‘1’在密码中的位置为3,49表示字符‘1’的ASCII码值)。 2)将原密码中的字母和特殊符号取出,组成一个新的字符串,该字符串每个字符前需增加该字符在原密码中的位置信息。(举例:输入密码SC1a2***,则新字符串为“1S2C4a678*”)。将新字符串中的大写字母转换成小写字母,并循环后移3个位置。(如A转换为d,Z转换为c);将小写字母转换成大写字母,并循环前移5个位置,形成一个新的字符串2。 3)将转换后的两个字符串(1和2)进行连接(先是数字对应新的字符串1,然后字母特殊符号对应新的字符串2),形成加密后的密码。用c++编写代码
时间: 2023-05-28 14:05:16 浏览: 100
判断密码必须包括大小写字母,特殊字符,数字,长度8到16位
4星 · 用户满意度95%
#include <stdio.h>
#include <string.h>
void encrypt(char *password);
int main() {
char password[9];
printf("Please enter an 8-digit password (no spaces or line breaks):\n");
scanf("%s", password);
encrypt(password);
printf("The encrypted password is: %s\n", password);
return 0;
}
void encrypt(char *password) {
char digits[9] = {'0','0','0','0','0','0','0','0','\0'}; //存储数字对应的字符串
char letters[9] = {'\0'}; //存储字母和特殊符号对应的字符串
char new_letters[9]; //存储转换后的字母和特殊符号字符串
int i, j = 0, k = 0;
for (i = 0; i < 8; i++) {
if (password[i] >= '0' && password[i] <= '9') {
digits[i] = password[i];
digits[i+1] = (char)(i+1+48); //将数字对应位置存入字符串
} else {
letters[j] = password[i];
j++;
}
}
for (i = 0; i < j; i++) {
new_letters[i] = letters[i];
if (letters[i] >= 'A' && letters[i] <= 'Z') {
new_letters[i] = (char)(((letters[i] - 'A' + 3) % 26) + 'a'); //大写字母转换成小写字母并循环后移3位
} else if (letters[i] >= 'a' && letters[i] <= 'z') {
new_letters[i] = (char)(((letters[i] - 'a' + 21) % 26) + 'A'); //小写字母转换成大写字母并循环前移5位
}
new_letters[i+1] = (char)(i+1+48); //将字母和特殊符号对应位置存入字符串
}
strcat(digits, new_letters); //将两个字符串连接
strcpy(password, digits); //将加密后的密码存入原密码数组
}
阅读全文