这篇文章主要为大家详细介绍了C语言实现密码强度检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现密码强度检测,供大家参考,具体内容如下

1 方案得分项

一、密码长度:

公式 :+(n*4),其中n表示密码长度

二、大写字母:

公式:+((len-n)*2),其中n表示大写字母个数,len表示密码长度

三、小写字母:

公式:+((len-n)*2),其中n表示小写字母个数,len表示密码长度

四、数字:

公式:+(n*4),其中n表示数字个数

条件:满足n < len,才能得到加分,len表示密码长度

五、符号:

公式:+(n*6),其中n表示符号个数

六、位于中间的数字或符号:

公式:+(n*2),其中n表示位于中间的数字或符号个数

七、最低条件得分:

公式:+(n*2),其中n表示满足的最低条件条目数

条件:只有满足最低条件,才能得到加分

其中最低条件的条目如下:

1.密码长度不小于8位

2.包含大写字母

3.包含小写字母

4.包含数字

5.包含符号

最低条件要求满足条目1并至少满足条目2-5中的任意三条。

2 方案减分项

一、只有字母:

公式:-n,其中n表示字母个数

二、只有数字:

公式:-n,其中n表示数字个数

三、重复字符数(大小写敏感):

该项描述复杂,具体计算方法见如下示例程序:

四、连续大写字母:

公式:-(n*2),其中n表示连续大写字母出现的次数

举例:如输入AUB,则n=2

五、连续小写字母:

公式:-(n*2),其中n表示连续小写字母出现的次数

举例:如输入aub,则n=2

六、连续数字:

公式:-(n*2),其中n表示连续数字出现的次数

举例:如输入381,则n=2

七、正序或逆序字母:

公式:-(n*3),其中n表示连续发生的次数

正序或逆序是指字母表中的顺序

不区分大小写

条件:只有连续3个字母或以上,才会减分,

例1:如输入ABC,则n=1

例2:如输入dcBA,则n=2

八、正序或逆序数字:

公式:-(n*3),其中n表示连续发生的次数

条件:只有连续3个数字或以上,才会减分

例1:如输入123,则n=1,

例2:如输入4321,则n=2

例3:如输入12,则不会减分

九、正序或逆序符号:

公式:-(n*3),其中n表示连续发生的次数

条件:只有连续3个符号或以上,才会减分

3 方案等级划分

根据密码评分,将密码划分成以下5个等级:

>= 80: 非常强(VERY_STRONG)

>= 60: 强(STRONG)

>= 40: 好(GOOD)

>= 20: 弱(WEAK)

>= 0: 非常弱( VERY_WEAK)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

int passwdmeter(char *passwd)

{

int i = 0;

//1.密码长度

int passwdlen;

passwdlen =strlen(passwd);

//2~5.大小写字母个数,数字个数,符号个数

int UppercaseLetters = 0;

int LowercaseLetters = 0;

int Numbers = 0,Symbols = 0;

for(i = 0;i < passwdlen; i++)

{

if (passwd[i]>='a' && passwd[i] <='z')

LowercaseLetters++;

else if (passwd[i]>='A' && passwd[i] <='Z')

UppercaseLetters++;

else if(passwd[i]>='0' && passwd[i] <='9')

Numbers++;

else

Symbols++;

}

//6.位于中间的数字或符号

int MiddleNumbersorSymbols = Numbers+Symbols;

if (passwd[0]>='a' && passwd[0] <='z') ;

else if (passwd[0]>='A' && passwd[0] <='Z') ;

else if(passwd[0]>='0' && passwd[0] <='9')

MiddleNumbersorSymbols--;

else

MiddleNumbersorSymbols--;

if (passwd[passwdlen - 1]>='a' && passwd[passwdlen - 1] <='z') ;

else if (passwd[passwdlen - 1]>='A' && passwd[passwdlen - 1] <='Z') ;

else if(passwd[passwdlen - 1]>='0' && passwd[passwdlen - 1] <='9')

MiddleNumbersorSymbols--;

else

MiddleNumbersorSymbols--;

//7.最低条件得分

int Requirements = 0;

if(UppercaseLetters > 0)Requirements++;

if(LowercaseLetters > 0)Requirements++;

if(Numbers > 0)Requirements++;

if(Symbols > 0)Requirements++;

if(passwdlen > 8)Requirements++;

//总加得分

int Bonus = passwdlen*4 + Symbols*6 + MiddleNumbersorSymbols*2;

if (UppercaseLetters)Bonus+= (passwdlen - UppercaseLetters)*2;

if (LowercaseLetters)Bonus+= (passwdlen - LowercaseLetters)*2;

if (Requirements > 3)Bonus+= Requirements*2;

if (Numbers != passwdlen)Bonus+= Numbers*4;

//1.只有字母

int LettersOnly = 0;

if (UppercaseLetters + LowercaseLetters == passwdlen)

LettersOnly = passwdlen;

//2.只有数字

int NumbersOnly = 0;

if (Numbers == passwdlen)

NumbersOnly = passwdlen;

//3.重复字符数(大小写敏感)

int RepeatCharacters = 0;

int repChar = 0;

for(i = 0; i < passwdlen; i++) {

int exists = 0;

int j = 0;

for (j = 0; j < passwdlen; j++) {

if (passwd[i] == passwd[j] && i != j) {

exists = 1;

RepeatCharacters +=abs(passwdlen/(j-i));

}

}

if (exists) {

repChar++;

int unqChar = passwdlen - repChar;

RepeatCharacters = (unqChar) ?ceil(RepeatCharacters/(double)unqChar) :

ceil(RepeatCharacters);

}

}

//4~6.连续大小写字母,数字

int ConsecutiveUppercaseLetters = 0;

int ConsecutiveLowercaseLetters = 0;

int ConsecutiveNumbers  = 0;

int flag = 0;//1-小写,2-大写,3-数字

int count = 0;

for(i = 0 ;i < passwdlen;i++)

{

if(i == 0){

if (passwd[i]>='a' && passwd[i] <='z'){flag = 1;count = 1;}

else if (passwd[i]>='A' && passwd[i] <='Z'){flag = 2;count = 1;}

else if(passwd[i]>='0' && passwd[i] <='9'){flag = 3;count = 1;}

}else

{

int tmpflag = 0;

if (passwd[i]>='a' && passwd[i] <='z')

{

tmpflag = 1;

}

else if (passwd[i]>='A' && passwd[i] <='Z')

{

tmpflag = 2;

}

else if(passwd[i]>='0' && passwd[i] <='9')

{

tmpflag = 3;

}else

{

tmpflag = 0;

}

if(tmpflag == flag)

count++;

else

{

if(count >= 2)

{

switch(flag)

{

case 1:

ConsecutiveLowercaseLetters += count-1;break;

case 2:

ConsecutiveUppercaseLetters += count-1;break;

case 3:

ConsecutiveNumbers += count-1;break;

default:

break;

}

}

flag = tmpflag;

count = 1;

}

}

}

if(count >= 2)

{

switch(flag)

{

case 1:

ConsecutiveLowercaseLetters += count-1;break;

case 2:

ConsecutiveUppercaseLetters += count-1;break;

case 3:

ConsecutiveNumbers += count-1;break;

default:

break;

}

}

//7~9 正序或者逆序的字母数字及符号

int SequentialLetters = 0;

int Sequenflag = 0;//1-正序,2-反序

int Sequencount = 1;

for(i = 1 ;i < passwdlen;i++)

{

int value = passwd[i];

if(passwd[i]>='a' && passwd[i] <='z' && passwd[i-1]>='A' && passwd[i-1] <='Z')

value = passwd[i] - 32;

else if(passwd[i-1]>='a' && passwd[i-1] <='z' && passwd[i]>='A' && passwd[i] <='Z')

value = passwd[i] + 32;

int tmpflag = 0;

if (value - 1 == passwd[i-1])

{

tmpflag = 1;

}else if (value + 1 == passwd[i-1])

tmpflag = 2;

else

tmpflag = 0;

if(Sequenflag == 0 && tmpflag != 0)

{

Sequencount = 1;

Sequenflag = tmpflag;

}

if (tmpflag == Sequenflag)

{

Sequencount++;

}else

{

if(Sequencount >= 3 && Sequenflag != 0)

SequentialLetters += Sequencount-2;

Sequencount = 1;

Sequenflag = tmpflag;

}

}

if(Sequencount >= 3 && Sequenflag != 0)

SequentialLetters += Sequencount-2;

//减分项计算

int Bonus2 = LettersOnly + NumbersOnly + RepeatCharacters + (

ConsecutiveUppercaseLetters+ConsecutiveLowercaseLetters+ConsecutiveNumbers)*2

+ SequentialLetters*3;

int sum = 0;

if (Bonus - Bonus2 < 0)

return 0;

return (Bonus - Bonus2) > 100?100:(Bonus - Bonus2);

}

以上就是本文的全部内容,希望对大家的学习有所帮助

c语言密码强度的判断程序,C语言实现密码强度检测相关推荐

  1. c语言判断非法字符题目,C语言考试题库之判断题-c语言考试判断题

    <C语言考试题库之判断题-c语言考试判断题>由会员分享,可在线阅读,更多相关<C语言考试题库之判断题-c语言考试判断题(7页珍藏版)>请在人人文库网上搜索. 1.三.判断题(1 ...

  2. c语言按键实现跳转程序,C语言中的跳转语句

    <C语言中的跳转语句>由会员分享,可在线阅读,更多相关<C语言中的跳转语句(4页珍藏版)>请在人人文库网上搜索. 1.C语言中的跳转语句c语言有4个跳转语句return.got ...

  3. 如何用c语言编写炫酷烟花程序,C语言实现放烟花的程序

    这是一个利用C语言编写放烟花的程序(同时也可以播放音乐),供大家参考,具体内容如下 代码如下 #pragma once #include #include //图形界面库头文件 #include // ...

  4. C语言输入end时结束程序,c语言输入eof结束怎么写

    1.C语言里的EOF(结束程序)怎么用 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file).在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件 ...

  5. c语言入门经典18个程序,C语言入门经典

    面向C语言初学者,详细且全面地讲解了C语言的各种知识,从基础知识到高级应用,由浅入深,循序渐进地引领读者掌握C语言中的各种编程技术,体会C语言的灵活与强大.同时,<C语言入门经典>着眼于应 ...

  6. java 密码提交前判断_JSP中如何写密码输入和核实密码时正确与否的Java判断代码?...

    jsp中判断两次输入的密码是否相同的方法是通过js实现的. 在两个文本框里添加onchange事件,在文本框的内容一发生变化时就触发该事件,而判断就写在这个事件之内就可以了. function che ...

  7. c语言设计一个自动报警的程序,C语言程序设计试题(B卷)..doc

    商洛学院2007-2008年度第一学期期末考试试题 课程:C语言程序设计(B卷) 适用班级:06物理教育(本)06生物(本) 一.填空题:(每空1分,共10分) 结构化程序设计所规定的三种基本的控制结 ...

  8. c语言矩阵的逆的程序,C语言求矩阵的逆矩阵

    <C语言求矩阵的逆矩阵>由会员分享,可在线阅读,更多相关<C语言求矩阵的逆矩阵(12页珍藏版)>请在人人文库网上搜索. 1.C语言求矩阵的逆矩阵班级: 自动化1604小组成员: ...

  9. c语言系统通常将一个判断为真,C语言程序设计学习-习题2

    习题二 一.选择题 1.下列4组选项中,均不是C语言关键字的选项是( A ) A.Define IF type B.getc char printf C.include scanf case D.wh ...

最新文章

  1. 多核之后,CPU 的发展方向是什么?中科院计算所包云岗详细解读
  2. linux脚本case语句,shell中的case语句,数组及函数
  3. 仿真程序驱动视景问题
  4. C/C++中的关键字
  5. 使用Python对图像进行中值滤波
  6. Gentoo解决Windows系统txt文本中文乱码问题
  7. selece * from jb51 where id45
  8. FileUtils的简单读写文件操作
  9. solidworks验证许可闪退_彻底解决SolidWorks“无法获得下列许可 SOLIDWORKS Standard”的激活错误...
  10. html 密码不小于六位怎么设置,192.168.1.1登录入口要六位密码是多少?
  11. 两张图轻松搞懂 二进制 八进制 十进制 十六进制 之间的转换关系
  12. php微信消息通知,php实现微信小程序消息通知
  13. 迷失逃脱小程序_恐怖游戏大全:奇幻夜之迷失!密室逃脱解谜恐怖小程序
  14. win8虚拟机_老司机教你如何在虚拟机安装win8系统,双系统也可以这样实现
  15. python3 Python.h No such file or directory
  16. 桌面放大镜、演示工具推荐——ZoomIt
  17. 自定义 Oh My Zsh 主题 cchi.zsh-theme
  18. PLC实验:定时器/计数器功能实验
  19. python:defaultdict 对象
  20. 异常信息:test02FlexController”不存在,wufa

热门文章

  1. 【java】RMI教程:入门与编译方法 远程
  2. 【算法】算法 动态规划 背包问题
  3. 【算法】汉诺塔 移动
  4. 【Elasticsearch】需要监控的 10 大 Elasticsearch 指标
  5. 【ElasticSearch】使用 _validate API 在不执行查询的情况下验证查询
  6. 90-40-010-源码-CUBE-引擎为MR写入Habse的构建
  7. 【Kafka】kafka 创建 topic的时候 Replication factor 参数理解
  8. 【Java】JDK8新特性之方法引用
  9. 【Java】Java Long映射到浏览器或者JavaScript后损失精度
  10. 95-130-502-源码-source-ElasticSearch相关-ElasticSearch connector