passwordman 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/passwordman.rb +224 -0
  3. metadata +43 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ef67fc9f8d11e3b434bc13da68e7582bd857dff7069ddfd1725341faa16a9bd9
4
+ data.tar.gz: 3291484ff71165d9e4337a7a97d08360ca2b2d7c1217c57eaddabd7cf611cc44
5
+ SHA512:
6
+ metadata.gz: 132774d8f8986d518fe7ac674456b9ebdcd7ee17c6dee5de25fb27d4e40e7a4392c91ca04036a17710854583c91633576d91b78044cd5a084d35b889e26a2c0e
7
+ data.tar.gz: c4a82930b960bead9736b9855cd66353c344085ad296dc1ae39bf9d86fbd6bfa6af4b4657f25968a03a86c633cb9f321b67bb9faacb1ae774ba5bef1904bc2c9
@@ -0,0 +1,224 @@
1
+ class PasswordMan
2
+ def self.analyse(pass)
3
+ len = pass.length
4
+ lower = "abcdefghijklmnopqrstuvwxyz"
5
+ upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
6
+ number = "1234567890"
7
+ symbol = "`-=[];'\/.,<~!@#$%^&*()_+{}:\"|?>"
8
+ sec = Array.new
9
+ num = Array.new
10
+ strength = "weak"
11
+ length = "short"
12
+ message = "\nPassword: #{pass}\n"
13
+
14
+ for i in 0..(len-1)
15
+
16
+ if lower.include?(pass[i])
17
+ if !sec.include?("lower")
18
+ sec << "lower"
19
+ num[sec.find_index("lower")] = 1
20
+ else
21
+ num[sec.find_index("lower")] += 1
22
+ end
23
+ elsif upper.include?(pass[i])
24
+ if !sec.include?("upper")
25
+ sec << "upper"
26
+ num[sec.find_index("upper")] = 1
27
+ else
28
+ num[sec.find_index("upper")] += 1
29
+ end
30
+ elsif number.include?(pass[i])
31
+ if !sec.include?("number")
32
+ sec << "number"
33
+ num[sec.find_index("number")] = 1
34
+ else
35
+ num[sec.find_index("number")] += 1
36
+ end
37
+ elsif symbol.include?(pass[i])
38
+ if !sec.include?("symbol")
39
+ sec << "symbol"
40
+ num[sec.find_index("symbol")] = 1
41
+ else
42
+ num[sec.find_index("symbol")] += 1
43
+ end
44
+ else
45
+ if !sec.include?("unknown")
46
+ sec << "unknown"
47
+ num[sec.find_index("unknown")] = 1
48
+ else
49
+ num[sec.find_index("unknown")] += 1
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ case sec.length
56
+ when 1
57
+ strength = "a weak"
58
+ when 2
59
+ strength = "a normal"
60
+ when 3
61
+ strength = "a strong"
62
+ when 4
63
+ strength = "a epic"
64
+ when 5
65
+ strength = "a really secure"
66
+ end
67
+
68
+ case len
69
+ when 0..6
70
+ length = "a short"
71
+ when 7..12
72
+ length = "not a long"
73
+ when 13..16
74
+ length = "a long"
75
+ when 16..20
76
+ length = "a really long"
77
+ when 20..30
78
+ length = "a extremely long"
79
+ end
80
+
81
+ for j in 0..(sec.length-1)
82
+ message += " It has #{num[j]} #{sec[j]} characters\n"
83
+ end
84
+
85
+ message += "After all,\n Its #{strength} password.\n Its #{length} password."
86
+
87
+ return message
88
+ end
89
+
90
+ def self.generate(len, strength)
91
+ lower = "abcdefghijklmnopqrstuvwxyz"
92
+ upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
93
+ number = "1234567890"
94
+ symbol = "`-=[];'\/.,<~!@#$%^&*()_+{}:\"|?>"
95
+ level = 3
96
+
97
+ text = ""
98
+ l_text = ""
99
+ u_text = ""
100
+ n_text = ""
101
+ s_text = ""
102
+
103
+
104
+ l_chance = rand(lower.length)
105
+ l_text += lower[l_chance]
106
+
107
+ # upper
108
+ u_chance = rand(upper.length)
109
+ u_text += upper[u_chance]
110
+
111
+ # number
112
+ n_chance = rand(number.length)
113
+ n_text += number[n_chance]
114
+
115
+ # symbol
116
+ s_chance = rand(symbol.length)
117
+ s_text += symbol[s_chance]
118
+
119
+ # lower , Upper , Number , Symbol
120
+ case strength
121
+ when "strong"
122
+ level = 3
123
+
124
+ # lower
125
+ l_chance = rand(lower.length)
126
+ l_text += lower[l_chance]
127
+
128
+ # upper
129
+ u_chance = rand(upper.length)
130
+ u_text += upper[u_chance]
131
+
132
+ # number
133
+ n_chance = rand(number.length)
134
+ n_text += number[n_chance]
135
+ when "weak"
136
+ level = 1
137
+
138
+ # lower
139
+ l_chance = rand(lower.length)
140
+ l_text += lower[l_chance]
141
+ when "normal"
142
+ level = 2
143
+
144
+ # lower
145
+ l_chance = rand(lower.length)
146
+ l_text += lower[l_chance]
147
+
148
+ # upper
149
+ u_chance = rand(upper.length)
150
+ u_text += upper[u_chance]
151
+ when "ultmate"
152
+ level = 4
153
+
154
+ # lower
155
+ l_chance = rand(lower.length)
156
+ l_text += lower[l_chance]
157
+
158
+ # upper
159
+ u_chance = rand(upper.length)
160
+ u_text += upper[u_chance]
161
+
162
+ # number
163
+ n_chance = rand(number.length)
164
+ n_text += number[n_chance]
165
+
166
+ # symbol
167
+ s_chance = rand(symbol.length)
168
+ s_text += symbol[s_chance]
169
+ else
170
+ puts "Code is wrong: Bug 01;"
171
+ puts "Strength: ", strength
172
+ end
173
+
174
+ for i in 1..(len-level)
175
+ chance = rand(level)
176
+ case chance
177
+ when 0
178
+ # lower
179
+ l_chance = rand(lower.length)
180
+ l_text += lower[l_chance]
181
+ when 1
182
+ # upper
183
+ u_chance = rand(upper.length)
184
+ u_text += upper[u_chance]
185
+ when 2
186
+ # number
187
+ n_chance = rand(number.length)
188
+ n_text += number[n_chance]
189
+ when 3
190
+ # symbol
191
+ s_chance = rand(symbol.length)
192
+ s_text += symbol[s_chance]
193
+ end
194
+ end
195
+
196
+ #if l_text.length >= 1 && u_text.length >= 1 && n_text.length >= 1 && s_text.length >= 1
197
+ letter_nums = Array.new
198
+ for i in 0..(len-1)
199
+ letter_nums << i
200
+ end
201
+
202
+ for i in 0..(len-1)
203
+ sorting = letter_nums.sample
204
+ case sorting
205
+ when 0..(l_text.length-1)
206
+ # lower
207
+ text += lower[sorting].to_s
208
+ when l_text.length..(l_text.length+u_text.length-1)
209
+ # upper
210
+ text += upper[sorting-l_text.length].to_s
211
+ when (l_text.length+u_text.length)..(l_text.length+u_text.length+n_text.length-1)
212
+ # number
213
+ text += number[sorting-(l_text.length+u_text.length)].to_s
214
+ when (l_text.length+u_text.length+n_text.length)..(l_text.length+u_text.length+n_text.length+s_text.length-1)
215
+ # symbol
216
+ text += symbol[sorting-(l_text.length+u_text.length+n_text.length)].to_s
217
+ end
218
+ letter_nums.delete(sorting)
219
+ end
220
+ #end
221
+
222
+ return text
223
+ end
224
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: passwordman
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Arshia Esmailzadeh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-12-19 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: this is a password generator and analyser written in pure ruby
14
+ email: arshiaas1973@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/passwordman.rb
20
+ homepage: https://rubygems.org/gems/passwordman
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubygems_version: 3.3.25
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: a password generator and analyser
43
+ test_files: []