1 |
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
|
<?php
|
3 |
|
/**
|
4 |
|
* @category Core
|
5 |
|
* @package Core_security
|
6 |
|
* @author Werner v.d.Decken
|
7 |
|
* @copyright ISTeasy-project(http://isteasy.de/)
|
8 |
|
* @license Creative Commons BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/
|
9 |
|
* @version $Id$
|
10 |
|
* @filesource $HeadURL:$
|
11 |
|
* @since Datei vorhanden seit Release 2.8.2
|
12 |
|
* @lastmodified $Date:$
|
13 |
|
*
|
14 |
|
* This generator is based on the class PasswordHash (c)2011 ISTeasy
|
15 |
|
* It generates very strong Passwords and calculates several hashes also.
|
16 |
|
*
|
17 |
|
*/
|
18 |
|
|
19 |
|
$minLoops = 8;
|
20 |
|
$maxLoops = 16;
|
21 |
|
$path2class = './framework/PasswordHash.php';
|
22 |
|
include $path2class;
|
23 |
|
$newpass = '';
|
24 |
|
$pass = '';
|
25 |
|
$hash = '';
|
26 |
|
// ** sanitize arguments
|
27 |
|
// length of password
|
28 |
|
if(!isset($_POST['length']) ) { $_POST['length'] = PasswordHash::SECURITY_NORMAL; }
|
29 |
|
$length = intval($_POST['length']);
|
30 |
|
// crypt type of hash
|
31 |
|
if(!isset($_POST['crypt']) ) { $_POST['crypt'] = 2; }
|
32 |
|
$crypt = intval($_POST['crypt']);
|
33 |
|
if($crypt < 0 || $crypt > 2) { $crypt = 2; }
|
34 |
|
// number of encryption loops
|
35 |
|
if(!isset($_POST['loops']) ) { $_POST['loops'] = 0; }
|
36 |
|
$loops = intval($_POST['loops']);
|
37 |
|
if($loops < $minLoops || $loops > $maxLoops) { $loops = $minLoops + floor(($maxLoops - $minLoops) / 2); }
|
38 |
|
// requested action
|
39 |
|
if(!isset($_POST['action']) ) { $_POST['action'] = 'pass'; }
|
40 |
|
// select actions
|
41 |
|
if($_POST['action'] == 'hash') {
|
42 |
|
if(isset($_POST['pass']) && trim($_POST['pass']) != '') {
|
43 |
|
$pass = trim($_POST['pass']);
|
44 |
|
$newpass = $pass;
|
45 |
|
$ph = new PasswordHash($loops, ($crypt == 1));
|
46 |
|
$hash = $ph->HashPassword($pass, ($crypt == 0) );
|
47 |
|
}
|
48 |
|
}else {
|
49 |
|
$newpass = PasswordHash::NewPassword($length);
|
50 |
|
$pass = $newpass;
|
51 |
|
}
|
52 |
|
// preselect length of password
|
53 |
|
$checkQuality0 = $length == PasswordHash::SECURITY_WEAK ? ' checked="checked"' : '';
|
54 |
|
$checkQuality1 = $length == PasswordHash::SECURITY_MEDIUM ? ' checked="checked"' : '';
|
55 |
|
$checkQuality2 = $length == PasswordHash::SECURITY_NORMAL ? ' checked="checked"' : '';
|
56 |
|
$checkQuality3 = $length == PasswordHash::SECURITY_STRONG ? ' checked="checked"' : '';
|
57 |
|
$checkQuality4 = $length == PasswordHash::SECURITY_STRONGER ? ' checked="checked"' : '';
|
58 |
|
if($checkQuality0.$checkQuality1.$checkQuality2.$checkQuality3.$checkQuality4 == '') {
|
59 |
|
$checkQuality2 = ' checked="checked"';
|
60 |
|
}
|
61 |
|
// preselect hash type
|
62 |
|
$checkCrypt0 = $crypt == 0 ? ' checked="checked"' : '';
|
63 |
|
$checkCrypt1 = $crypt == 1 ? ' checked="checked"' : '';
|
64 |
|
$checkCrypt2 = $crypt == 2 ? ' checked="checked"' : '';
|
65 |
|
$bcryptActive = ( (method_exists('PasswordHash', '_GenSaltSha512') && CRYPT_SHA512 == 1) ||
|
66 |
|
(method_exists('PasswordHash', '_GenSaltBlowfish') && CRYPT_BLOWFISH == 1) ||
|
67 |
|
(method_exists('PasswordHash', '_GenSaltExtended') && CRYPT_EXT_DES == 1) );
|
68 |
|
$bcryptActive = $bcryptActive ? '' : ' style="display: none;"';
|
69 |
|
// create encryption loops option-list
|
70 |
|
$loopsOptions = '';
|
71 |
|
for($x = $minLoops; $x <= $maxLoops; $x++) {
|
72 |
|
$curr = ($x == $loops ? ' selected="selected"' : '');
|
73 |
|
$loopsOptions .= '<option value="'.$x.'"'.$curr.'>2^'.$x.' ('.number_format(pow(2, $x), 0, ',', '.').') </option>'."\n";
|
74 |
|
}
|
75 |
|
|
76 |
|
// autodetect language
|
77 |
|
$lang = 'en';
|
78 |
|
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && strlen($_SERVER['HTTP_ACCEPT_LANGUAGE'])>2) {
|
79 |
|
$lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
|
80 |
|
}
|
81 |
|
// define language translation tables
|
82 |
|
$TXT = array(
|
83 |
|
'en' => array(
|
84 |
|
'pw_title' => 'Password-Generator',
|
85 |
|
'pw_quality' => 'Quality of password',
|
86 |
|
'pw_quality_0' => 'bad',
|
87 |
|
'pw_quality_1' => 'weak',
|
88 |
|
'pw_quality_2' => 'good',
|
89 |
|
'pw_quality_3' => 'strong',
|
90 |
|
'pw_quality_4' => 'excellent',
|
91 |
|
'pw_suggestion' => 'Our password suggestion',
|
92 |
|
'pw_action' => 'suggest password',
|
93 |
|
'hg_title' => 'Hash-Generator',
|
94 |
|
'hg_text' => 'Enter Text to hash',
|
95 |
|
'hg_type' => 'Kind of crypt',
|
96 |
|
'hg_type_0' => 'simple MD5 (very insecure)',
|
97 |
|
'hg_type_1' => 'MD5 + salt + rounds (relatively safe)',
|
98 |
|
'hg_type_2' => 'Ext-DES/Blowfish/SHA512 + rounds (high security)',
|
99 |
|
'hg_loops' => 'Number of rounds',
|
100 |
|
'hg_copy' => 'Hash to copy',
|
101 |
|
'hg_action' => 'calculate'
|
102 |
|
),
|
103 |
|
'de' => array(
|
104 |
|
'pw_title' => 'Passwort-Generator',
|
105 |
|
'pw_quality' => 'Qualität des Passwortes',
|
106 |
|
'pw_quality_0' => 'schlecht',
|
107 |
|
'pw_quality_1' => 'schwach',
|
108 |
|
'pw_quality_2' => 'gut',
|
109 |
|
'pw_quality_3' => 'stark',
|
110 |
|
'pw_quality_4' => 'exzellent',
|
111 |
|
'pw_suggestion' => 'Unser Passwortvorschlag',
|
112 |
|
'pw_action' => 'Passwort vorschlagen',
|
113 |
|
'hg_title' => 'Hash-Generator',
|
114 |
|
'hg_text' => 'zu hashenden Text eingeben',
|
115 |
|
'hg_type' => 'Verschlüsselungsart',
|
116 |
|
'hg_type_0' => 'einfaches MD5 (sehr unsicher)',
|
117 |
|
'hg_type_1' => 'MD5 + Salz + mehrere Runden (relativ sicher)',
|
118 |
|
'hg_type_2' => 'Ext-DES/Blowfish/SHA512 + mehrere Runden (sehr sicher)',
|
119 |
|
'hg_loops' => 'Anzahl der Runden',
|
120 |
|
'hg_copy' => 'erzeugten Hash kopieren',
|
121 |
|
'hg_action' => 'berechnen'
|
122 |
|
)
|
123 |
|
);
|
124 |
|
// start screen output
|
125 |
|
?>
|
126 |
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
|
127 |
|
<head>
|
128 |
|
<title>PWH-Generator v.0.1</title>
|
129 |
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
130 |
|
<meta name="author" content="Werner von der Decken" />
|
131 |
|
<meta name="copyright" content="ISTeasy, W.v.d.Decken" />
|
132 |
|
<meta name="generator" content="ISTeasy - PWH-Generator v.0.1" />
|
133 |
|
<style type="text/css">
|
134 |
|
html { /* Schrifteinstellung für das ganze Dokument */
|
135 |
|
font-family: "Trebuchet MS",Verdana, Arial, Helvetica, sans-serif;
|
136 |
|
font-size: 78%;
|
137 |
|
font-weight: normal;
|
138 |
|
color: #303030;
|
139 |
|
min-height: 100.2%;
|
140 |
|
}
|
141 |
|
body {
|
142 |
|
text-align: center;
|
143 |
|
padding-top: 2em;
|
144 |
|
}
|
145 |
|
.body {
|
146 |
|
width: 40em;
|
147 |
|
margin: auto;
|
148 |
|
}
|
149 |
|
fieldset {
|
150 |
|
padding: 1em;
|
151 |
|
text-align: left;
|
152 |
|
}
|
153 |
|
legend {
|
154 |
|
font-size: 1.3em;
|
155 |
|
}
|
156 |
|
input {
|
157 |
|
margin: 0.5em 0;
|
158 |
|
padding: 3px;
|
159 |
|
font-size: 1.2em;
|
160 |
|
width: 97%;
|
161 |
|
background-color: transparent;
|
162 |
|
}
|
163 |
|
input[type = "radio"] {
|
164 |
|
display: inline;
|
165 |
|
}
|
166 |
|
#hash { font-size: 1em; }
|
167 |
|
</style>
|
168 |
|
</head>
|
169 |
|
<body>
|
170 |
|
<div class="body">
|
171 |
|
<h1>PWH-Generator v.0.1</h1>
|
172 |
|
<fieldset>
|
173 |
|
<legend> <?php echo $TXT[$lang]['pw_title']; ?> </legend>
|
174 |
|
<form method="post" name="genpass" action="">
|
175 |
|
<input type="hidden" name="action" value="pass" />
|
176 |
|
<input type="hidden" name="crypt" value="<?php echo $crypt; ?>" />
|
177 |
|
<input type="hidden" name="loops" value="<?php echo $loops; ?>" />
|
178 |
|
<label for="length"><strong><?php echo $TXT[$lang]['pw_quality']; ?></strong></label><br />
|
179 |
|
<input type="radio" id="length0" name="length" value="<?php echo PasswordHash::SECURITY_WEAK.'"'.$checkQuality0; ?>>
|
180 |
|
<label for="length0"><?php echo $TXT[$lang]['pw_quality_0']; ?></label></input>
|
181 |
|
<input type="radio" id="length1" name="length" value="<?php echo PasswordHash::SECURITY_MEDIUM.'"'.$checkQuality1; ?>>
|
182 |
|
<label for="length1"><?php echo $TXT[$lang]['pw_quality_1']; ?></label></input>
|
183 |
|
<input type="radio" id="length2" name="length" value="<?php echo PasswordHash::SECURITY_NORMAL.'"'.$checkQuality2; ?>>
|
184 |
|
<label for="length2"><?php echo $TXT[$lang]['pw_quality_2']; ?></label></input>
|
185 |
|
<input type="radio" id="length3" name="length" value="<?php echo PasswordHash::SECURITY_STRONG.'"'.$checkQuality3; ?>>
|
186 |
|
<label for="length3"><?php echo $TXT[$lang]['pw_quality_3']; ?></label></input>
|
187 |
|
<input type="radio" id="length4" name="length" value="<?php echo PasswordHash::SECURITY_STRONGER.'"'.$checkQuality4; ?>>
|
188 |
|
<label for="length4"><?php echo $TXT[$lang]['pw_quality_4']; ?></label></input> <br /><br />
|
189 |
|
<label for="pass"><strong><?php echo $TXT[$lang]['pw_suggestion']; ?></strong></label><br />
|
190 |
|
<input type="text" id="pass" name="pass" value="<?php echo $newpass; ?>" readonly="readonly" /><br /><br />
|
191 |
|
<input name="submit" id="submit1" type="submit" value="<?php echo $TXT[$lang]['pw_action']; ?>" />
|
192 |
|
</form>
|
193 |
|
</fieldset><br /><br />
|
194 |
|
<fieldset id="setHash" style="position: relative; background: url('warten.gif') -1000px no-repeat;">
|
195 |
|
<legend> <?php echo $TXT[$lang]['hg_title']; ?> </legend>
|
196 |
|
<form method="post" name="genhash" action="">
|
197 |
|
<input type="hidden" name="action" value="hash" />
|
198 |
|
<input type="hidden" name="length" value="<?php echo $length; ?>" />
|
199 |
|
<label for="pass"><strong><?php echo $TXT[$lang]['hg_text']; ?></strong></label><br />
|
200 |
|
<input type="text" id="hgpass" name="pass" value="<?php echo $pass; ?>" /><br />
|
201 |
|
<strong><?php echo $TXT[$lang]['hg_type']; ?></strong><br />
|
202 |
|
<input type="radio" id="crypt0" name="crypt" value="0"<?php echo $checkCrypt0; ?>>
|
203 |
|
<label for="crypt0"><?php echo $TXT[$lang]['hg_type_0']; ?></label></input><br />
|
204 |
|
<input type="radio" id="crypt1" name="crypt" value="1"<?php echo $checkCrypt1; ?>>
|
205 |
|
<label for="crypt1"><?php echo $TXT[$lang]['hg_type_1']; ?></label></input><br />
|
206 |
|
<span<?php echo $bcryptActive; ?>>
|
207 |
|
<input type="radio" id="crypt2" name="crypt" value="2"<?php echo $checkCrypt2; ?>>
|
208 |
|
<label for="crypt2"><?php echo $TXT[$lang]['hg_type_2']; ?></label></input>
|
209 |
|
</span>
|
210 |
|
<br />
|
211 |
|
<div id="loopsbox">
|
212 |
|
<select name="loops">
|
213 |
|
<?php echo $loopsOptions; ?>
|
214 |
|
</select> <?php echo $TXT[$lang]['hg_loops']?><br /><br />
|
215 |
|
</div>
|
216 |
|
<br />
|
217 |
|
<label for="hash"><strong><?php echo $TXT[$lang]['hg_copy']; ?></strong></label>
|
218 |
|
<div>
|
219 |
|
<input type="text" id="hash" name="hash" value="<?php echo $hash; ?>" readonly="readonly" />
|
220 |
|
</div>
|
221 |
|
<br />
|
222 |
|
<input name="submit" id="submit0" type="submit" value="<?php echo $TXT[$lang]['hg_action']; ?>" />
|
223 |
|
</form>
|
224 |
|
</fieldset>
|
225 |
|
<span style="font-size: 0.7em">
|
226 |
|
©2011 <a href="http://isteasy.de/" title="ISTeasy-project"><span style="font-style: italic; fontweight: bold;">
|
227 |
|
<span style="color: #aa0000;">IST</span>easy</span>-project</a>
|
228 |
|
<a href="http://creativecommons.org/licenses/by-sa/3.0/" title="Creative Commons BY-SA 3.0">
|
229 |
|
Creative Commons BY-SA 3.0</a>
|
230 |
|
</span>
|
231 |
|
</div>
|
232 |
|
|
233 |
|
<script type="text/javascript">
|
234 |
|
/* <![CDATA[ */
|
235 |
|
function showWait() {
|
236 |
|
document.getElementById('setHash').style.backgroundPosition = 'center';
|
237 |
|
}
|
238 |
|
|
239 |
|
function clearHash() {
|
240 |
|
document.getElementById('hash').value = "";
|
241 |
|
}
|
242 |
|
|
243 |
|
function showLoops() {
|
244 |
|
if (document.getElementById("crypt0").checked == true) {
|
245 |
|
document.getElementById("loopsbox").style.display = 'none';
|
246 |
|
}else {
|
247 |
|
document.getElementById("loopsbox").style.display = 'block';
|
248 |
|
}
|
249 |
|
}
|
250 |
|
showLoops();
|
251 |
|
document.getElementById('crypt0').addEventListener("click", showLoops, false);
|
252 |
|
document.getElementById('crypt1').addEventListener("click", showLoops, false);
|
253 |
|
document.getElementById('crypt2').addEventListener("click", showLoops, false);
|
254 |
|
document.getElementById('hgpass').addEventListener("keypress", clearHash, false);
|
255 |
|
document.getElementById('submit0').addEventListener("click", showWait, false);
|
256 |
|
/* ]]> */
|
257 |
|
</script>
|
258 |
|
|
259 |
|
</body>
|
260 |
|
</html>
|
261 |
|
|
typofix in BG and RU