算法题解_密码

简介: 算法题解_密码

一、密码


题目描述

网上流传一句话:“常在网上飘啊,哪能不挨刀啊~”。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16。

(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:

1.大写字母:A,B,C…Z;

2.小写字母:a,b,c…z;

3.数字:0,1,2…9;

4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任务就是判断它是不是一个安全的密码。

输入 输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。

输出 对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

样例输入 3 a1b2c3d4 Linle@ACM ~@^@!% 样例输出 NO YES NO


1.思路

下面是刚开始我的做法,我的做法是写了四个方法来分别判断数字,大写,小写,特殊符号,做法非常麻烦最后测试也没通过qaq,原来这个题用正则表达式非常简单,通过四个正则表达式的判断,然后通过matches检验字符串是否匹配,可以很快解决问题,正则表达式可以看这篇文章非常详细:正则表达式

错误代码:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class firsttest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int M = scanner.nextInt();
        while (M--> 0) {
            String mes = scanner.next();
            if(8 <=mes.length() && mes.length()<16 && temp(mes)+temp1(mes)+temp2(mes)+isSpecialChar(mes)>=3){
                System.out.println("YES");
            }else{
                System.out.println("NO");
            }
        }
    }
    //判断字符种类
    public static int temp(String message){
        int count =0;
        for(int i = 0;i<message.length();i++){
            if(Character.isDigit(message.charAt(i))){
                count=1;
                return count;
            }
        }
        return count;
    }
    public static int temp1(String message){
        int count = 0;
        for(int i=0;i<message.length();i++){
            if(Character.isLowerCase(message.charAt(i))){
                count=1;
                return count;
            }
        }
        return count;
    }
    public static int temp2(String message){
        int count = 0;
        for(int i=0;i<message.length();i++){
            if(Character.isUpperCase(message.charAt(i))){
                count=1;
                return count;
            }
        }
        return count;
    }
    //判断特殊字符
    public static int isSpecialChar(String message){
        int count=0;
        String mes1 = "~,!,@,#,$,%,^";
        Pattern p = Pattern.compile(mes1);
        Matcher m = p.matcher(message);
        if(m.find()){
            return count=1;
        }
        return count;
    }
            //密码限制 限制输入长度
            // 三组-四组四位二进制来表示 0001 0011 0111 1111
            // 特殊符号限定
}


2.做法:

import java.util.Scanner;
public class secondtest {
    public static  final String shu = ".*\\d+.*";
    public static final String daxie = ".*[A-Z]+.*";
    public static final String xiaoxie = ".*[a-z]+.*";
    public static final String teshu = ".*[~,!,@,#,$,%,^]+.*";
    public static boolean Cheeck(String message){
        if(message == null || message.length() <8) {return false;}
        int count = 0;
        if(message.matches(shu)){ count+=1;}
        if(message.matches(daxie)){ count+=1; }
        if(message.matches(xiaoxie)){ count+=1; }
        if(message.matches(teshu)){ count+=1; }
        if(count>=3){
            return true;
        }
        return false;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int M = scanner.nextInt();
        while (M--> 0) {
            String mes = scanner.next();
            if(Cheeck(mes)){
                System.out.println("YES");
            }else{
                System.out.println("NO");
            }
        }
    }
}
相关文章
|
3月前
|
算法 安全 Unix
[RFC6238] TOTP: 基于时间的一次性密码生成算法
[RFC6238] TOTP: 基于时间的一次性密码生成算法
62 0
|
1月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
118 0
|
6月前
|
算法 安全 数据安全/隐私保护
密码学基础-对称密码算法(Symmetric-key Algorithm)
密码学基础-对称密码算法(Symmetric-key Algorithm)
|
2天前
|
存储 安全 算法
|
2天前
|
存储 算法 安全
|
7月前
|
算法 安全 API
RSA密码算法设计与实现
本实验带您掌握RSA加解密算法原理,实现RSA加解密过程。
121 0
|
7月前
|
算法 数据安全/隐私保护 C++
RSA密码算法C++实现
RSA密码算法C++实现
156 0
|
10月前
|
机器学习/深度学习 传感器 算法
【图像加密】基于低对称密码算法实现图像加密解密附matlab代码
【图像加密】基于低对称密码算法实现图像加密解密附matlab代码
|
11月前
|
算法 前端开发 JavaScript
SpringSecurity:前后端分离项目中用户名与密码通过国密算法SM2加密传输
SpringSecurity:前后端分离项目中用户名与密码通过国密算法SM2加密传输
1022 2