Seite 1 von 1
Suche Funktion zum zählen
Verfasst: 21.11.2016 13:20
von xXRobo_CubeXx
Tach, ich suche eine Funktion zum zählen von unterschiedlichen Zeichen in einen String.
Ich baue ein Password Manager und möchte rausfinden wie unterschiedlich oder komplex das PW is.
Ich will aber nich nur unterschieden ob Buchstaben Zahlen und Sonderzeichen sondern
wie viele unterschiedliche Buchstaben genutzt wurden.
Ich denk ma ich muss eine Schleife bauen und jeden Buchstabe mit dem anderen Buchstaben vergleichen
aber hab Probleme da mit. Kann mir jemand helfen?

Re: Suche Funktion zum zählen
Verfasst: 21.11.2016 13:25
von RSBasic
Eine Variante:
Code: Alles auswählen
EnableExplicit
Procedure CountDifferentCharacters(String$)
Protected NewMap Characters()
Protected a
For a=1 To Len(String$)
Characters(Mid(String$, a, 1)) = 1
Next
ProcedureReturn MapSize(Characters())
EndProcedure
Debug CountDifferentCharacters("Hallo")
Re: Suche Funktion zum zählen
Verfasst: 21.11.2016 13:49
von xXRobo_CubeXx
genau so wollt ich es haben danke

Re: Suche Funktion zum zählen
Verfasst: 22.11.2016 09:49
von Kukulkan
Ich hab mal sowas in JS geschrieben. Sollte nicht schwer sein das nach PB zu portieren:
Code: Alles auswählen
/**
* Calculate a strength value from given password.
* If Strength is > 30, the password is somehow safe!
*
* @param string Password
* @returns int Strength
*/
function PassStrength(Password) {
// length check
var W = 0;
var numCount = 0;
W = (Password.length * Password.length) / 6;
var numeric = !isNaN(parseFloat(Password[0])) && isFinite(Password[0]);
if (numeric) { numCount = numCount + 1; }
for (var i=1; i<Password.length; i++) {
// if previous char was another one this is good, otherwise bad
if (Password[i] != Password[i-1]) {
W = W + 2;
} else {
W = W - 1;
}
// check, if previous char was other case the current (good)
var upper = (Password[i] == Password[i].toUpperCase());
var lower = (Password[i] == Password[i].toLowerCase());
var pupper = (Password[i-1] == Password[i-1].toUpperCase());
var plower = (Password[i-1] == Password[i-1].toLowerCase());
// good if previous case is different than current
if (upper != pupper || lower != plower) {
W = W + 2;
}
// check if value is used multiple times
var occurences = Password.split(Password[i]);
if (occurences.length > 3) {
W = W - 2;
}
// count number of numeric characters
var numeric = !isNaN(parseFloat(Password[i])) && isFinite(Password[i]);
if (numeric) { numCount = numCount + 1; }
}
// extra points if number of numeric characters is between 20 and 70 percent
if (numCount > Password.length * 0.2 && numCount < Password.length * 0.7) {
W = W + 5;
}
// not good if password is more than 70% numbers
if (numCount > Password.length * 0.7) {
W = W - 5;
}
// no negative results
if (W < 0) { W = 0; }
// return rounded result
return Math.round(W);
}
Vorteil ist, dass die Qualität nicht nur nach der Länge, sondern auch nach der Variabilität richtet. Ob das passt ist natürlich auch Ansichtssache. Aber man kann das ganz einfach anpassen...
Re: Suche Funktion zum zählen
Verfasst: 22.11.2016 12:08
von Kurzer
Hier ein konventioneller Ansatz:
Code: Alles auswählen
EnableExplicit
Define.s sPasswort = "OttosDoppeldeckerstürztab1988)"
Define.s sStore, sChar
Define.i i
For i = 1 To Len(sPasswort)
sChar = Mid(sPasswort, i, 1)
If FindString(sStore, sChar) = 0
sStore + sChar
EndIf
Next i
Debug "Anzahl verschiedener Zeichen: " + Str(Len(sStore))
Debug "Die Zeichen selbst: " + sStore
Ergibt:
Code: Alles auswählen
[11:09:10] [Debug] Anzahl verschiedener Zeichen: 20
[11:09:10] [Debug] Die Zeichen selbst: OtosDpeldckrüzab198)
[11:09:10] Die Programmausführung ist abgeschlossen.
Re: Suche Funktion zum zählen
Verfasst: 22.11.2016 12:25
von ts-soft
Ich würde ja noch mehr auswerten, um ein sicheres Passwort zu generieren.
1. Anzahl Zeichen (Allgemein alles)
2. Anzahl Buchstaben
3. Anzahl Zahlen
4. Anzahl Sonderzeichen
5. Anzahl Großbuchstaben
6. Anzahl Kleinbuchstaben
7. Wie Gemixed (z.B. nicht alle Zahlen am Ende)
und am Ende habt Ihr dann so ein Passwort:
*****************************

Re: Suche Funktion zum zählen
Verfasst: 22.11.2016 12:37
von xXRobo_CubeXx
@Kukulkan
Leider kenn ich mich nich mit "JS" aus. kein plan :/
@Kurzer
genau so wollt ich es auch haben danke

@ts-soft
***************************** scheint aber kein sicheres PW zu sein....
Man kann seine PWs auch mit einfachen Wörter füllen wie ich das immer mache wie z.b. für das Pureboard: PureBoard_2015_xXRobo_CubeXx
Lässt sich viel besser merken und ist trotzdem sicher, langes PW, hat Buchstaben, Zahlen und sonderzeichen.
