Project

General

Profile

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, ',', '.').')&nbsp;&nbsp;</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>&nbsp;<?php echo $TXT[$lang]['pw_title']; ?>&nbsp;</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
						&nbsp;<label for="length0"><?php echo $TXT[$lang]['pw_quality_0']; ?></label></input>&nbsp;&nbsp;
181
					<input type="radio" id="length1" name="length" value="<?php echo PasswordHash::SECURITY_MEDIUM.'"'.$checkQuality1; ?>>
182
						&nbsp;<label for="length1"><?php echo $TXT[$lang]['pw_quality_1']; ?></label></input>&nbsp;&nbsp;
183
					<input type="radio" id="length2" name="length" value="<?php echo PasswordHash::SECURITY_NORMAL.'"'.$checkQuality2; ?>>
184
						&nbsp;<label for="length2"><?php echo $TXT[$lang]['pw_quality_2']; ?></label></input>&nbsp;&nbsp;
185
					<input type="radio" id="length3" name="length" value="<?php echo PasswordHash::SECURITY_STRONG.'"'.$checkQuality3; ?>>
186
						&nbsp;<label for="length3"><?php echo $TXT[$lang]['pw_quality_3']; ?></label></input>&nbsp;&nbsp;
187
					<input type="radio" id="length4" name="length" value="<?php echo PasswordHash::SECURITY_STRONGER.'"'.$checkQuality4; ?>>
188
						&nbsp;<label for="length4"><?php echo $TXT[$lang]['pw_quality_4']; ?></label></input>&nbsp;<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>&nbsp;<?php echo $TXT[$lang]['hg_title']; ?>&nbsp;</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; ?>>&nbsp;
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; ?>>&nbsp;
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; ?>>&nbsp;
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>&nbsp;&nbsp;<?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
				&copy;2011&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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

    
(5-5/7)