Mit SNMP Version 3 erstelle ich einen Benutzer. Jetzt habe ich es eingerichtet, wo ich einen Benutzer klonen und das funktioniert gut. Ich muss jedoch den AuthKey des neuen Benutzers ändern. Wie kann ich das machen? Ich kenne die Oid für authKeyChange, aber ich weiß nicht, wie man den neuen Schlüssel erzeugt. Wie erzeuge ich diesen Schlüssel? Kann es mit SNMPSharpNet gemacht werden? Wenn es einen einfacheren Weg gibt, dies zu tun, während ich den Benutzer erstelle, kann ich das auch tun. JEDER Weg, den authKey (und privKey, aber einen Schritt nach dem anderen) zu ändern, wird sehr geschätzt. Ich benutze VB.net, wenn es irgendetwas bedeutet.Ändern authKey eines Benutzers
Antwort
Also habe ich herausgefunden, wie das geht. Es ist ein komplexer Prozess. Ich folgte this Dokument, das ist RFC2574. Tun Sie eine Strg + F für "keyChange :: =" und Sie finden den Absatz, der Sie durch den Algorithmus führt, um den keyChange-Wert zu generieren. Der folgende Code hat zuverlässig zum Generieren des keyChange-Werts funktioniert. Alles, was Sie von diesem Punkt aus tun müssen, ist, den keyChange-Wert an die usmAuthKeyChange-OID zu senden. Wenn Sie das Datenschutzkennwort ändern, drücken Sie den Wert für keyChange auf die OIM für usmPrivKeyChange. Ich schäme mich zu sagen, dass ich aufgrund der Zeitkrise keine Zeit hatte, diese Arbeit komplett zu machen, also musste ich bei der Verwendung von SHA eine völlig neue Methode programmieren, die fast genau dasselbe tat. Wieder schäme ich mich, es zu veröffentlichen, aber ich weiß, wie sehr ich meinen Kopf gegen eine Wand schlug, und wenn jemand später hierher kommt und dies sieht, möchte ich, dass sie wissen, was zu tun ist, ohne den Kampf zu bestehen.
Hier ist der gesamte Code Sie VB.Net und die SNMPSharpNet Bibliothek verwenden müssen:
Private Function GenerateKeyChange(ByVal newPass As String, ByVal oldPass As String, ByRef target As UdpTarget, ByRef param As SecureAgentParameters) As Byte()
Dim authProto As AuthenticationDigests = param.Authentication
Dim hash As IAuthenticationDigest = Authentication.GetInstance(authProto)
Dim L As Integer = hash.DigestLength
Dim oldKey() As Byte = hash.PasswordToKey(Encoding.UTF8.GetBytes(oldPass), param.EngineId)
Dim newKey() As Byte = hash.PasswordToKey(Encoding.UTF8.GetBytes(newPass), param.EngineId)
Dim random() As Byte = Encoding.UTF8.GetBytes(GenerateRandomString(L))
Dim temp() As Byte = oldKey
Dim delta(L - 1) As Byte
Dim iterations As Integer = ((newKey.Length - 1)/L) - 1
Dim k As Integer = 0
If newKey.Length > L Then
For k = 0 To iterations
'Append random to temp
Dim merged1(temp.Length + random.Length - 1) As Byte
temp.CopyTo(merged1, 0)
random.CopyTo(merged1, random.Length)
'Store hash of temp in itself
temp = hash.ComputeHash(merged1, 0, merged1.Length)
'Generate the first 16 values of delta
For i = 0 To L - 1
delta(k * L + i) = temp(i) Xor newKey(k * L + i)
Next
Next
End If
'Append random to temp
Dim merged(temp.Length + random.Length - 1) As Byte
temp.CopyTo(merged, 0)
random.CopyTo(merged, temp.Length)
'Store hash of temp in itself
temp = hash.ComputeHash(merged, 0, merged.Length)
'Generate the first 16 values of delta
For i = 0 To (newKey.Length - iterations * L) - 1
delta(iterations * L + i) = temp(i) Xor newKey(iterations * L + i)
Next
Dim keyChange(delta.Length + random.Length - 1) As Byte
random.CopyTo(keyChange, 0)
delta.CopyTo(keyChange, random.Length)
Return keyChange
End Function
Private Function GenerateKeyChangeShaSpecial(ByVal newPass As String, ByVal oldPass As String, ByRef target As UdpTarget, ByRef param As SecureAgentParameters) As Byte()
Dim authProto As AuthenticationDigests = param.Authentication
Dim hash As IAuthenticationDigest = Authentication.GetInstance(authProto)
Dim L As Integer = 16
Dim oldKey() As Byte = hash.PasswordToKey(Encoding.UTF8.GetBytes(oldPass), param.EngineId)
Dim newKey() As Byte = hash.PasswordToKey(Encoding.UTF8.GetBytes(newPass), param.EngineId)
Array.Resize(oldKey, L)
Array.Resize(newKey, L)
Dim random() As Byte = Encoding.UTF8.GetBytes(GenerateRandomString(L))
Dim temp() As Byte = oldKey
Dim delta(L - 1) As Byte
Dim iterations As Integer = ((newKey.Length - 1)/L) - 1
Dim k As Integer = 0
If newKey.Length > L Then
For k = 0 To iterations
'Append random to temp
Dim merged1(temp.Length + random.Length - 1) As Byte
temp.CopyTo(merged1, 0)
random.CopyTo(merged1, random.Length)
'Store hash of temp in itself
temp = hash.ComputeHash(merged1, 0, merged1.Length)
Array.Resize(temp, L)
'Generate the first 16 values of delta
For i = 0 To L - 1
delta(k * L + i) = temp(i) Xor newKey(k * L + i)
Next
Next
End If
'Append random to temp
Dim merged(temp.Length + random.Length - 1) As Byte
temp.CopyTo(merged, 0)
random.CopyTo(merged, temp.Length)
'Store hash of temp in itself
temp = hash.ComputeHash(merged, 0, merged.Length)
Array.Resize(temp, L)
'Generate the first 16 values of delta
For i = 0 To (newKey.Length - iterations * L) - 1
delta(iterations * L + i) = temp(i) Xor newKey(iterations * L + i)
Next
Dim keyChange(delta.Length + random.Length - 1) As Byte
random.CopyTo(keyChange, 0)
delta.CopyTo(keyChange, random.Length)
Return keyChange
End Function
Private Function GenerateRandomString(ByVal length As Integer) As String
Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Dim r As New Random
Dim sb As New StringBuilder
For i As Integer = 1 To length
Dim idx As Integer = r.Next(0, 51)
sb.Append(s.Substring(idx, 1))
Next
Return sb.ToString()
End Function
Noch einmal, ich bin ach so wohl bewusst, dieser Code ist scheußlich, aber es funktioniert, und das ist alles, was ich benötigt in der Zwischenzeit. Ich verstehe, dass dies technische Schulden sind und nicht die Art, wie ich programmieren sollte, aber es ist hier und ich hoffe, dass Sie etwas davon nutzen können.
Wenn dies nicht funktioniert, vergessen Sie nicht, zu frc2574 zu gehen und sich den Algorithmus anzusehen.
- 1. Wie kann man das Passwort eines bestehenden Benutzers ändern?
- 2. Ändern Sie die Commit-Nachricht eines anderen Benutzers?
- 3. ASP.NET MVC: Wie kann ich die Rolle eines Benutzers ändern?
- 4. Validierung eines Benutzers Eingabe
- 5. Imitieren eines Windows-Benutzers
- 6. Überwachungsabfragen eines MySQL-Benutzers
- 7. Render full_name eines Benutzers
- 8. Shelveset eines anderen Benutzers finden
- 9. Ändern der Kopfzeilenausrichtung des Benutzers
- 10. Umbenennen eines AD-Benutzers (CN) VBS
- 11. Die Suchanfrage eines Benutzers analysieren
- 12. Geprüft, Nachschlage-Audits eines Benutzers
- 13. Blockieren eines Benutzers in Asp.NET
- 14. Ausloggen eines Benutzers in Symfony2
- 15. SQL-Abfrage eines Benutzers Stream
- 16. Speichern eines Benutzers Zeitzone Präferenz
- 17. Programmgesteuertes Abmelden eines ASP.NET-Benutzers
- 18. Azure AD Sicherheitsgruppen eines Benutzers
- 19. Get Verzeichnisbaum eines Benutzers Dropbox
- 20. Benutzerprofil eines anderen Benutzers zeigt
- 21. ActiveDirectoryMembershipProvider zur Validierung eines Benutzers
- 22. php- Profilseite eines Benutzers bearbeiten
- 23. Alle Berechtigungen eines Benutzers auflisten
- 24. Verhindern des Zugriffs eines Benutzers zum Ändern eines Filters in einem Formular
- 25. JHipster: Registrieren eines Benutzers mit zusätzlichen Informationen
- 26. Erstellen eines neuen Benutzers mit der Rolle und der Berechtigung eines anderen Benutzers unter Linux
- 27. Ändern eines Benutzerpassworts in CockroachDB
- 28. Befehl zum Ändern des Spitznamens des Benutzers Discord
- 29. C# - Programmgesteuertes Abmelden und Anmelden eines Benutzers
- 30. PLSQL - Alle Datenbankobjekte eines Benutzers löschen
Jeder sagt "generieren den keyChange Wert basierend auf dem geheimen privKey des Klon-from-Benutzer und den geheimen Schlüssel für den neuen Benutzer verwendet werden", aber niemand sagt, wie. –