TUTOS.EU

Conversion d'un SID brut en SID string en vbscript

Le code est tiré de codepouradmins.free.fr


'Exemple d'utilisation
Wscript.echo SIDBrutToSIDString("010500000000000515000000B93E0E19C1406A2E0363450075060000")

Public Function SIDBrutToSIDString(ByVal MonSID)

	'Version du 20 fevrier 2007
	'Convertit un SID qui est en format brut en un SID sous forme S-1-5-21 etc ....
	'Exemple :
	'010500000000000515000000B93E0E19C1406A2E0363450075060000
	'Devient
	'S-1-5-15-420363961-778715329-4547331-1653

	'Realise avec l'aide des explications trouvées sur
	'http://blogs.msdn.com/oldnewthing/archive/2004/03/15/89753.aspx

	'Signification des chiffres
	'S-1- version number (SID_REVISION)
	'-5- SECURITY_NT_AUTHORITY
	'-21- SECURITY_NT_NON_UNIQUE
	'-...-...-...- these identify the machine that issued the SID
	'72713 unique user id on the machine

	Dim MonResultat
	Dim NombreDeMoins
	Dim ChiffreTempo

	SIDBrutToSIDString = MonSID

	MonSID = Trim(MonSID)

	If Len(MonSID) > 0 Then

		MonResultat = "S-"

		'Extraction du premier chiffre
		MonResultat = MonResultat & CLng(Left(MonSID, 2))
		MonSID = Mid(MonSID, 3)

		'Extraction du nombre de -
		NombreDeMoins = CLng(Left(MonSID, 2))
		MonSID = Mid(MonSID, 3)

		'Extraction de 12
		MonResultat = MonResultat & "-" & CLng(Left(MonSID, 12))
		MonSID = Mid(MonSID, 13)

		'Extraction de 8
		ChiffreTempo = Left(MonSID, 8)
		ChiffreTempo = PermutterPourSID(ChiffreTempo)
		ChiffreTempo = Hexa2Decimal(ChiffreTempo)
		'ChiffreTempo = CDec("&H" & ChiffreTempo)

		MonSID = Mid(MonSID, 9)
		MonResultat = MonResultat & "-" & ChiffreTempo

		For Compteur = 1 To NombreDeMoins
			If Len(MonSID) = 0 Then
				Exit For
			End If

			'Extraction de 8
			ChiffreTempo = Left(MonSID, 8)
			ChiffreTempo = PermutterPourSID(ChiffreTempo)
			ChiffreTempo = Hexa2Decimal(ChiffreTempo)
			'ChiffreTempo = CDec("&H" & ChiffreTempo)
			MonSID = Mid(MonSID, 9)
			MonResultat = MonResultat & "-" & ChiffreTempo
		Next

		SIDBrutToSIDString = MonResultat

	End If 'If Len(MonSID) > 0 Then

End Function

Public Function PermutterPourSID(ByVal Meschiffres)

	'Version du 30 nov 2006
	'Inverse les lettres par paire de 2

	Dim LeResultat

	PermutterPourSID = Meschiffres

	LeResultat = ""
	If Len(Meschiffres) > 0 Then
		Do While Len(Meschiffres) > 1
			LeResultat = Left(Meschiffres, 2) & LeResultat
			If Len(Meschiffres) >= 2 Then
				Meschiffres = Mid(Meschiffres, 3)
			End If
		Loop

		If Len(Meschiffres) = 1 Then
			LeResultat = Meschiffres & LeResultat
		End If
		PermutterPourSID = LeResultat
	End If

End Function

Public Function Hexa2Decimal(ByVal MonHexa)

	'Version du 05 décembre 2006
	'On rentre un hexadécimal et on ressort un décimal

	Dim Compteur
	Dim UnChiffreHexa
	Dim UnChiffreDecimal
	Dim ChiffreAAjouter
	Dim Total
	Dim Puissance

	Hexa2Decimal = "" 'Par défaut
	Total = 0
	Puissance = 0

	For Compteur = Len(MonHexa) To 1 Step -1
		UnChiffreHexa = Mid(MonHexa, Compteur, 1)

		'On convertit le chiffre Hexa en chiffre décimal
		Select Case LCase(UnChiffreHexa)
			Case "f"
				UnChiffreDecimal = 15
			Case "e"
				UnChiffreDecimal = 14
			Case "d"
				UnChiffreDecimal = 13
			Case "c"
				UnChiffreDecimal = 12
			Case "b"
				UnChiffreDecimal = 11
			Case "a"
				UnChiffreDecimal = 10
			Case Else
				UnChiffreDecimal = CInt(UnChiffreHexa)
		End Select

		ChiffreAAjouter = UnChiffreDecimal * (16 ^ Puissance)
		Puissance = Puissance + 1

		Total = Total + ChiffreAAjouter
	Next

	Hexa2Decimal = Total

End Function
Lien vers le fichier : cliquez ici Copier le code

2