PasswortgeneratorTest: Unterschied zwischen den Versionen
Aus znilwiki
BLinz (Diskussion | Beiträge) Die Seite wurde neu angelegt: „<html lang="de"> <head> <meta charset="UTF-8"> <title>Passwortgenerator</title> <style> label, input, select, textarea, button { font-family: "Consolas", monospace; margin: 5px 0; size 26; } .form-field { margin-bottom: 10px; } </style> </head> <body> <p style="font-family: "Consolas", monospace; padding: 20px; margin: 20px"> <div class="Pa…“ |
BLinz (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
| (2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
<html lang="de"> | <html lang="de"> | ||
<head> | |||
<meta charset="UTF-8"> | |||
<title>Passwortgenerator</title> | |||
<style> | |||
label, input, select, textarea, button { | |||
font-family: "Consolas", monospace; | |||
margin: 5px 0; | |||
font-size: 16px; | |||
} | |||
.form-field { | |||
margin-bottom: 10px; | |||
} | |||
.button-group button { | |||
margin-right: 10px; | |||
padding: 8px 15px; | |||
cursor: pointer; | |||
} | |||
</style> | |||
</head> | |||
<body> | |||
<p style="font-family: 'Consolas', monospace; padding: 20px; margin: 20px"> | |||
<div class="Passwortgenerator-links" style="float: left; width: 50%;"> | |||
<div class="form-field"> | |||
<label for="length">Passwortlänge:</label> | |||
<input type="number" id="length" value="17"> | |||
</div> | |||
<div class="form-field"> | |||
<label for="vowels">Vokale:</label> | |||
<input type="text" id="vowels" value="aeiou"> | |||
</div> | |||
<div class="form-field"> | |||
<label for="consonants">Konsonanten:</label> | |||
<input type="text" id="consonants" value="bcdfghjklmnpqrstvwxyz"> | |||
</div> | |||
<div class="form-field"> | |||
<label for="digits">Zahlen:</label> | |||
<input type="text" id="digits" value="0123456789"> | |||
</div> | |||
<div class="form-field"> | |||
<label for="numDigits">Anzahl der Zahlenstellen:</label> | |||
<input type="number" id="numDigits" value="4"> | |||
</div> | |||
<div class="form-field"> | |||
<label for="specials">Sonderzeichen:</label> | |||
<input type="text" id="specials" value="!$%&/=?+*#-."> | |||
</div> | |||
<div class="form-field"> | |||
<label for="count">Anzahl der Passwörter:</label> | |||
<select id="count"> | |||
<option value="1">1</option> | |||
<option value="3">3</option> | |||
<option value="8" selected>8</option> | |||
<option value="10">10</option> | |||
<option value="25">25</option> | |||
<option value="50">50</option> | |||
<option value="100">100</option> | |||
</select> | |||
</div> | |||
<div class="form-field button-group"> | |||
<button id="generate">Passwörter erstellen</button> | |||
<button id="save-settings">Einstellungen speichern</button> | |||
<button id="reset-settings">Standardeinstellungen laden & Cookie löschen</button> | |||
</div> | |||
<div class="form-field"> | |||
<textarea id="output" rows="10" cols="80" placeholder="Erzeugte Passwörter erscheinen hier..."></textarea> | |||
</div> | |||
<script> | |||
// Standardwerte für das Zurücksetzen | |||
const DEFAULTS = { | |||
length: 17, | |||
vowels: 'aeiou', | |||
consonants: 'bcdfghjklmnpqrstvwxyz', | |||
digits: '0123456789', | |||
numDigits: 4, | |||
specials: '!$%&/=?+*#-.' | |||
}; | |||
// Funktion zum Holen aller aktuellen Formularwerte | |||
function getCurrentSettings() { | |||
return { | |||
length: document.getElementById("length").value, | |||
vowels: document.getElementById("vowels").value, | |||
consonants: document.getElementById("consonants").value, | |||
digits: document.getElementById("digits").value, | |||
numDigits: document.getElementById("numDigits").value, | |||
specials: document.getElementById("specials").value, | |||
count: document.getElementById("count").value | |||
}; | |||
} | |||
// Funktion zum Setzen der Formularwerte | |||
function setFormSettings(settings) { | |||
for (const key in settings) { | |||
const element = document.getElementById(key); | |||
if (element) { | |||
element.value = settings[key]; | |||
} | |||
} | |||
} | |||
// #region Cookie-Funktionen | |||
const COOKIE_NAME = 'pwGenSettings'; | |||
function setCookie() { | |||
const settings = getCurrentSettings(); | |||
const json = JSON.stringify(settings); | |||
// Encode den JSON-String und setze das Cookie (gültig für 365 Tage) | |||
document.cookie = COOKIE_NAME + "=" + encodeURIComponent(json) + "; max-age=" + (365 * 24 * 60 * 60) + "; path=/"; | |||
alert("Einstellungen gespeichert!"); | |||
} | |||
function getCookie() { | |||
const name = COOKIE_NAME + "="; | |||
const decodedCookie = decodeURIComponent(document.cookie); | |||
const ca = decodedCookie.split(';'); | |||
for(let i = 0; i <ca.length; i++) { | |||
let c = ca[i]; | |||
while (c.charAt(0) === ' ') { | |||
c = c.substring(1); | |||
} | |||
if (c.indexOf(name) === 0) { | |||
try { | |||
// JSON-String extrahieren und parsen | |||
const json = c.substring(name.length, c.length); | |||
const settings = JSON.parse(json); | |||
setFormSettings(settings); | |||
console.log("Einstellungen aus Cookie geladen."); | |||
} catch (e) { | |||
console.error("Fehler beim Parsen des Cookies:", e); | |||
} | |||
return true; | |||
} | |||
} | |||
return false; | |||
} | |||
function deleteCookie() { | |||
// Setzt das max-age auf 0, um das Cookie sofort zu löschen | |||
document.cookie = COOKIE_NAME + "=; max-age=0; path=/"; | |||
setFormSettings(DEFAULTS); | |||
alert("Einstellungen auf Standard zurückgesetzt und Cookie gelöscht!"); | |||
} | |||
// #endregion Cookie-Funktionen | |||
// #region Passwortgenerator-Logik | |||
function generatePasswordLogic() { | |||
// Werte aus dem Formular einlesen (jetzt über Funktion) | |||
const settings = getCurrentSettings(); | |||
var totalLength = parseInt(settings.length, 10); | |||
var vowels = settings.vowels; | |||
var consonants = settings.consonants; | |||
var digitsAllowed = settings.digits; | |||
var numDigits = parseInt(settings.numDigits, 10); | |||
var specials = settings.specials; | |||
var passwordCount = parseInt(settings.count, 10); | |||
var output = ""; | |||
// Hilfsfunktion: Zufälliges Zeichen aus einem String auswählen | |||
function randomChar(str) { | |||
return str.charAt(Math.floor(Math.random() * str.length)); | |||
} | |||
// Hilfsfunktion: Erzeuge eine abwechselnde Zeichenkette (Vokal/Konsonant) der Länge "length" | |||
function generateAlternatingSequence(length, vowels, consonants) { | |||
if(length <= 0 || (vowels.length === 0 && consonants.length === 0)) return ""; | |||
var sequence = ""; | |||
// Zufällig entscheiden, ob mit Vokal oder Konsonant gestartet wird | |||
var useVowel = Math.random() < 0.5; | |||
if (vowels.length === 0 && consonants.length > 0) useVowel = false; | |||
if (consonants.length === 0 && vowels.length > 0) useVowel = true; | |||
for(var i = 0; i < length; i++){ | |||
if (useVowel && vowels.length > 0) { | |||
sequence += randomChar(vowels); | |||
if (consonants.length > 0) useVowel = false; | |||
} else if (!useVowel && consonants.length > 0) { | |||
sequence += randomChar(consonants); | |||
if (vowels.length > 0) useVowel = true; | |||
} else { | |||
break; | |||
} | |||
} | |||
return sequence; | |||
} | |||
// Passwortgenerierungsschleife | |||
for(var p = 0; p < passwordCount; p++){ | |||
// Berechne die Länge des nicht-numerischen Teils | |||
var letterSectionLength = totalLength - numDigits; | |||
// Die Gesamtlänge der Wörter ist Restlänge - 2 Sonderzeichen (gemäß Ihren Regeln) | |||
var totalWordLength = letterSectionLength - 2; | |||
if (totalWordLength < 0) totalWordLength = 0; | |||
// Bestimme die Basislänge für den ersten Buchstabenteil | |||
var baseFirstPart = Math.round(totalWordLength / 2); | |||
// Zufällige Anpassung um -1, 0 oder 1 | |||
var adjustment = [-1, 0, 1][Math.floor(Math.random() * 3)]; | |||
var firstPartLength = baseFirstPart + adjustment; | |||
// Sicherstellen, dass der erste Teil in einen sinnvollen Bereich fällt | |||
if(firstPartLength < 0) firstPartLength = 0; | |||
if(firstPartLength > totalWordLength) firstPartLength = totalWordLength; | |||
// Die Länge des zweiten Buchstabenteils | |||
var secondPartLength = totalWordLength - firstPartLength; | |||
// Erzeuge die Teile | |||
var firstPart = generateAlternatingSequence(firstPartLength, vowels, consonants); | |||
var secondPart = generateAlternatingSequence(secondPartLength, vowels, consonants); | |||
// Ersten Buchstaben groß schreiben | |||
if(firstPart.length > 0) { | |||
firstPart = firstPart.charAt(0).toUpperCase() + firstPart.slice(1); | |||
} | |||
if(secondPart.length > 0) { | |||
secondPart = secondPart.charAt(0).toUpperCase() + secondPart.slice(1); | |||
} | |||
// Sonderzeichen auswählen (wenn vorhanden) | |||
var specialChar1 = specials.length > 0 ? randomChar(specials) : ''; | |||
var specialChar2 = specials.length > 0 ? randomChar(specials) : ''; | |||
// Numerischen Teil erzeugen | |||
var digitSequence = ""; | |||
for(var d = 0; d < numDigits && digitsAllowed.length > 0; d++){ | |||
digitSequence += randomChar(digitsAllowed); | |||
} | |||
// Komplettes Passwort zusammensetzen und ggf. kürzen | |||
var password = firstPart + specialChar1 + secondPart + specialChar2 + digitSequence; | |||
if (password.length > totalLength) { | |||
password = password.substring(0, totalLength); | |||
} | |||
output += password + "\n"; | |||
} | |||
// Ausgabe in das Textfeld schreiben | |||
document.getElementById("output").value = output; | |||
} | |||
// #endregion Passwortgenerator-Logik | |||
// Event Listener einrichten | |||
window.addEventListener("load", function() { | |||
// Lade Cookie-Einstellungen beim Start | |||
getCookie(); | |||
// Hier wird die Funktion direkt zugewiesen | |||
document.getElementById("generate").addEventListener("click", generatePasswordLogic); | |||
document.getElementById("save-settings").addEventListener("click", setCookie); | |||
document.getElementById("reset-settings").addEventListener("click", deleteCookie); | |||
}); | |||
</script> | |||
</div> | |||
<div class="Passwortgenerator-rechts" style="float: right; width: 47%;"> | |||
<strong>Der Passwortgenerator funktioniert nach folgenden Regeln:</strong><br> | |||
<ul> | |||
<li>Hinten werden Zahlen angehängt</li> | |||
<li>Die Zahl besteht aus den Ziffern die in dem Feld vorkommen (man kann auch was anderes hinzufügen oder löschen)</li> | |||
<li>Die Anzahl der Stellen ist festgelegt, z.B. auf 4</li> | |||
<li>Die Gesamtlänge - Anzahl der Stellen ergibt die Restlänge (Wörter + 2 Sonderzeichen)</li> | |||
<li>Von dieser Restlänge wird **2 abgezogen** (1 für das Sonderzeichen zwischen den Wörtern und 1 für das Sonderzeichen zwischen dem 2. Wort und der angehängten Zahl). Bei 17 Zeichen - 4 Zahlen - 2 Sonderzeichen bleibt also **11 Buchstaben**.</li> | |||
<li>Diese Restlänge wird durch **2 geteilt**. Ggf. wird dabei aufgerundet. Das ergibt die Basislänge des ersten Wortes, z.B. $\text{Rund}(\frac{11}{2}) = 6$</li> | |||
<li>Diese Länge wird zufällig um 1 erhöht oder verringert oder unverändert gelassen. Die neue Länge ist in diesem Beispiel also 5, 6 oder 7</li> | |||
<li>Für den ersten Teil wird zufällig entschieden ob mit einem Vokal oder einen Konsonanten begonnen wird<li> | |||
<li>Es werden nun abwechseln Konsonanten und Vokale aneinander gereiht bis die Wortlänge erreicht ist</li> | |||
<li>Der erste Buchstabe wird in einen Großbuchstaben geändert</li> | |||
<li>Es wird ein Sonderzeichen angehängt ($\text{specialChar1}$)</li> | |||
<li>Das zweite Wort wird nach den gleichen Regeln wie das erste erzeugt (Restlänge der Buchstaben). Also wieder zufällig ob Konsonant oder Vokal, danach abwechselnd, erster Buchstabe groß</li> | |||
<li>Danach wird das 2. Sonderzeichen ($\text{specialChar2}$) und die Zahl angehängt</li> | |||
</ul> | |||
<br> | |||
Das ganze habe ich erstellt weil ich sehr gerne den <a target="_blank" rel="noopener noreferrer" href="https://www.gaijin.at/de/tools/password-generator">Gaijin Password Generator</a> benutze.<br> | |||
Dort insbesondere die <b>Internet-Passwörter 3 (14 Zeichen)</b><br> | |||
Wenn man aber weis das ich das gerne mache, ließen sich meine Passwörter so leicht erraten. Ich habe dann schon immer variiert bzw. mehrere dieser Kennwörter hintereinander gehängt.<br> | |||
Der Generator hier verwendet mehr Zufälle und variiert auch die Länge der Wörter und Zahlen auf Wunsch. | |||
Ich mag einfach das dabei künstliche Wörter herauskommen die sich leichter Tippen und bei Bedarf sogar merken lassen.<br> | |||
</div> | |||
</p> | |||
</body> | |||
</html> | </html> | ||
Aktuelle Version vom 16. Dezember 2025, 12:07 Uhr
Der Passwortgenerator funktioniert nach folgenden Regeln:
Das ganze habe ich erstellt weil ich sehr gerne den Gaijin Password Generator benutze.
Dort insbesondere die Internet-Passwörter 3 (14 Zeichen)
Wenn man aber weis das ich das gerne mache, ließen sich meine Passwörter so leicht erraten. Ich habe dann schon immer variiert bzw. mehrere dieser Kennwörter hintereinander gehängt.
Der Generator hier verwendet mehr Zufälle und variiert auch die Länge der Wörter und Zahlen auf Wunsch. Ich mag einfach das dabei künstliche Wörter herauskommen die sich leichter Tippen und bei Bedarf sogar merken lassen.
- Hinten werden Zahlen angehängt
- Die Zahl besteht aus den Ziffern die in dem Feld vorkommen (man kann auch was anderes hinzufügen oder löschen)
- Die Anzahl der Stellen ist festgelegt, z.B. auf 4
- Die Gesamtlänge - Anzahl der Stellen ergibt die Restlänge (Wörter + 2 Sonderzeichen)
- Von dieser Restlänge wird **2 abgezogen** (1 für das Sonderzeichen zwischen den Wörtern und 1 für das Sonderzeichen zwischen dem 2. Wort und der angehängten Zahl). Bei 17 Zeichen - 4 Zahlen - 2 Sonderzeichen bleibt also **11 Buchstaben**.
- Diese Restlänge wird durch **2 geteilt**. Ggf. wird dabei aufgerundet. Das ergibt die Basislänge des ersten Wortes, z.B. $\text{Rund}(\frac{11}{2}) = 6$
- Diese Länge wird zufällig um 1 erhöht oder verringert oder unverändert gelassen. Die neue Länge ist in diesem Beispiel also 5, 6 oder 7
- Für den ersten Teil wird zufällig entschieden ob mit einem Vokal oder einen Konsonanten begonnen wird
- Es werden nun abwechseln Konsonanten und Vokale aneinander gereiht bis die Wortlänge erreicht ist
- Der erste Buchstabe wird in einen Großbuchstaben geändert
- Es wird ein Sonderzeichen angehängt ($\text{specialChar1}$)
- Das zweite Wort wird nach den gleichen Regeln wie das erste erzeugt (Restlänge der Buchstaben). Also wieder zufällig ob Konsonant oder Vokal, danach abwechselnd, erster Buchstabe groß
- Danach wird das 2. Sonderzeichen ($\text{specialChar2}$) und die Zahl angehängt
Das ganze habe ich erstellt weil ich sehr gerne den Gaijin Password Generator benutze.
Dort insbesondere die Internet-Passwörter 3 (14 Zeichen)
Wenn man aber weis das ich das gerne mache, ließen sich meine Passwörter so leicht erraten. Ich habe dann schon immer variiert bzw. mehrere dieser Kennwörter hintereinander gehängt.
Der Generator hier verwendet mehr Zufälle und variiert auch die Länge der Wörter und Zahlen auf Wunsch. Ich mag einfach das dabei künstliche Wörter herauskommen die sich leichter Tippen und bei Bedarf sogar merken lassen.
