Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Zufallszahl erzeugen die es 100%ig nur einmal gibt, geht das?


  • Please log in to reply
20 replies to this topic
jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
Wenn euch das mit der MACAddresse zu aufwendig ist, dann nimm doch einen anderen Wert für HMAC.
z.B. HMAC = fump2000
oder HMAC = Computername
oder HMAC = ((dezimalwert von fump2000) / pi / random)
 
Decimal fump2000 = 102 117 109 112 50 48 48 48
Octal fump2000 = 146 165 155 160 62 60 60 60
Hexa fump2000 = 66 75 6D 70 32 30 30 30
binär fump2000 = 1100110 1110101 1101101 1110000 110010 110000 110000 110000
Morse fump2000 = ..-. ..- -- .--. ..--- ----- ----- -----
grin.png
[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Ok ich ersetze es durch was anderes und mach dann 200.000 ID's

 

Meld mich dann :)



fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

#Include Crypt.ahk
#Include CryptConst.ahk
#Include CryptFoos.ahk
 
strTo1 :=01001000011000010110110001101100011011110010000001010111011001010110110001110100
strTo2 := A_AhkVersion A_IPAddress1
strToHMAC := strTo1 strTo2
 
Loop, 10
    {
        GoSub GetID
        sleep 2
        string2 := TokenI "`n"
        FileAppend, %string2%, text.txt
    }
msgbox fertig
Return
 
GetID:
strToHash := A_NOW A_MSec A_UserName

crypt := Crypt.Hash.StrHash( strToHash, 1, strToHMAC, 7 )

msgbox % strToHash "-" strToHMAC "-" crypt

TokenI := RegExReplace(crypt, "s).{" 2 - 1 "}\K.")

Return

 

 

Es bleibt dabei... crypt hat nur einmal einen Wert...



jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
dann nimm das hier:

edit nr2:
Das müsste doch jetzt durcheinander genug sein grin.png
; GLOBAL SETTINGS ===================================================================

#NoEnv
#SingleInstance force

; SCRIPT ============================================================================

strRandom := RegExReplace(RandomStr(), "[^A-Za-z0-9]", "i")    ;Nur alphanum wird ausgegeben
strTime := A_NOW A_MSec * (4 * ATan(1))    ;A_NOW & A_MSec wird mit Pi multipliziert

strToHash := % strTime A_TickCount A_UserName
strToSalt := % strRandom 10211710911250484848 A_ComputerName
strCrypt := SSMD5(strToHash, strToSalt)
secureID := RegExReplace(strCrypt, "s).{" 2 - 1 "}\K.")

MsgBox, % secureID

; FUNCTIONS =========================================================================

RandomStr(l = 10, i = 48, x = 122) { ;länge, niedrigster und höchster Asc-Wert
	Loop, %l% {
		Random, r, i, x
		s .= Chr(r)
	}
	Return, s
}

SSMD5(data, salt) {
	hash := ""
	saltedHash := MD5(data . salt) 
	saltedHashR := MD5(salt . data)
	len := StrLen(saltedHash)
	Loop, % len / 2
	{
		byte1 := "0x" . SubStr(saltedHash, 2 * A_index - 1, 2)
		byte2 := "0x" . SubStr(saltedHashR, 2 * A_index - 1, 2)
		SetFormat, integer, hex
		hash .= StrLen(ns := SubStr(byte1 ^ byte2, 3)) < 2 ? "0" ns : ns
	}
	SetFormat, integer, dez
	return hash
}

MD5(string) {
	return HashFromString(string, 0x8003)
}

HashFromAddr(pData, len, algid, key=0) {
	hProv := size := hHash := hash := ""
	ptr := (A_PtrSize) ? "ptr" : "uint"
	aw := (A_IsUnicode) ? "W" : "A"
	if (DllCall("advapi32\CryptAcquireContextW","Ptr*",hProv,"Uint",0,"Uint",0,"Uint",24,"UInt",0xF0000000)) {
		if (DllCall("advapi32\CryptCreateHash","Ptr",hProv,"Uint",algid,"Uint",0,"Uint",0,"Ptr*",hHash )) {
			if (DllCall("advapi32\CryptHashData", "Ptr", hHash, "Ptr", pData, "Uint", len, "Uint", 0)) {
				if (DllCall("advapi32\CryptGetHashParam", "Ptr", hHash, "Uint", 2, "Uint", 0, "UintP", size, "Uint", 0)) {
					VarSetCapacity(bhash, size, 0)
					DllCall("advapi32\CryptGetHashParam", "Ptr", hHash, "Uint", 2, "Uint", &bhash, "UintP", size, "Uint", 0)
				}
			}
			DllCall("advapi32\CryptDestroyHash", "Ptr", hHash)
		}
		DllCall("advapi32\CryptReleaseContext", "Ptr", hProv, "Uint", 0)
	}
	int := A_FormatInteger
	SetFormat, Integer, h
	Loop, % size
	{
		v := substr(NumGet(bhash, A_Index-1, "uchar") "", 3)
		while (strlen(v)<2)
		v := "0" v
		hash .= v
	}
	SetFormat, Integer, % int
	return hash
}

HashFromString(string, algid, key=0) {
	len := strlen(string)
	if (A_IsUnicode) {
		VarSetCapacity(data, len)
		StrPut := "StrPut"
		%StrPut%(string, &data, len, "cp0")
		return HashFromAddr(&data, len, algid, key)
	}
	data := string
	return HashFromAddr(&data, len, algid, key)
}

[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

3 doppelte auf 200.000 ID's allerdings auf 8 gekürzt. Ist schon klar, dass die Wahrscheinlichkeit größer wird je kleiner ich den String mache.

 

Aber 3 auf 200.000 ist mir genug.

 

Vielen Dank!!!

 

MfG
fump



fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

So bei 12 Zeichen hab ich auf eine Millionen ID's keine doppelte.

 

Das sollte genügen :) Vielen Dank nochmal!

 

Falls jemand exakt 1 Millionen Strings benötigt:

1millionIDs.rar
 

MfG
fump