使用SNMP版本3,我正在創建一個用戶。 現在,我已經設置了我克隆用戶的地方,並且工作得很好。但是,我需要更改新用戶的authKey。我怎樣才能做到這一點?我知道authKeyChange的oid,但是,我不知道如何生成新的密鑰。我如何生成該密鑰?可以使用SNMPSharpNet完成嗎? 如果在創建用戶時有更簡單的方法來做到這一點,我也可以做到這一點。任何改變authKey(和privKey,但一次一步)的方式非常感謝。我使用VB.net,如果它意味着什麼。更改用戶的authKey
0
A
回答
0
所以我想出瞭如何做到這一點。這是一個複雜的過程。我跟着this文件,這是rfc2574。爲「keyChange :: =」做一個ctrl + F,你會發現這個段落引導你通過算法來生成keyChange值。以下代碼可靠地生成keyChange值。所有你需要做的就是將keyChange值推送到usmAuthKeyChange OID。如果要更改隱私密碼,請將keyChange值推送到usmPrivKeyChange OID。我很慚愧地說,由於時間緊迫,我沒有時間完成這項工作,所以當使用SHA時,我必須編寫一個全新的方法,幾乎完成同樣的事情。再次,我很慚愧地把它貼出來,但我知道我有多麼b against我的頭靠在牆上,如果稍後有人來這裏看到這些,我希望他們知道該怎麼做,而不用經歷鬥爭。
這裏是所有你需要使用VB.Net和SNMPSharpNet庫中的代碼:
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
同樣,我是如此清楚地知道這個代碼是可怕的,但它的作品,這是我在此期間需要。我知道這是技術性債務,而不是我應該編碼的方式,但它在這裏,我希望你能從中獲得一些用處。
如果這不起作用,不要忘記去frc2574看看算法。
相關問題
- 1. 更改用戶PHP
- 2. 更改用戶名
- 3. 的Git更改用戶
- 4. 更改Git的用戶名
- 5. Facebook更改用戶的ID?
- 6. picasa web api使用authkey獲取不公開的相冊
- 7. 更改iPhone用戶代理?
- 8. 更改Phonegap用戶代理
- 9. CakePHP&更改用戶簡介
- 10. 更改github用戶/私鑰
- 11. Apache更改默認用戶
- 12. ASP.NET用戶名更改
- 13. FreeRADIUS更改用戶域
- 14. 用戶設置不更改
- 15. oAuth/MGTwitterEngine更改iPhone用戶?
- 16. AlarmManager更改用戶數據
- 17. Python更改用戶目錄
- 18. Modx更改用戶組
- 19. 用戶更改elfinder root
- 20. 更改用戶狀態
- 21. 更改用戶密碼
- 22. 用戶組更改事件
- 23. Jenkins - 奴隸用戶更改
- 24. 阻止用戶更改URL
- 25. Yii,更改主頁用戶
- 26. 更改用戶上下文
- 27. 更改用戶代理好
- 28. 更改用戶代理
- 29. PHP用戶登錄更改!
- 30. 更改Gitlab CI Runner用戶
大家都說「根據clone-from用戶的祕密 privKey和用於新用戶的密鑰 生成keyChange值」,但沒有人說HOW。 –