如何使用 python 在没有 cisco 设备的情况下对 Cisco Type 8 密钥进行编码

问题描述 投票:0回答:2

我想知道是否可以使用 python 脚本生成 CISCO 文档中显示的哈希密钥,而无需 CISCO 设备。

https://learningnetwork.cisco.com/s/article/cisco-routers-password-types

Example :

R1(config)# username yasser algorithm-type sha256 secret cisco

R1# show running-config | inc username

username yasser secret 8 $8$dsYGNam3K1SIJO$7nv/35M/qr6t.dVc7UY9zrJDWRVqncHub1PE9UlMQFs
encryption sha256 password-encryption cisco
2个回答
2
投票

如果除了此处给出的信息之外还考虑以下内容,则可以重现链接示例中的哈希值:

  • 格式为
    $8$<random 14 bytes salt>$<Base64 encoded PBKDF2 hash>
  • 20000 作为 PBKDF2 的迭代计数
  • ./0-9A-Za-z
    作为 Base64 字母
  • 无 Base64 填充

虽然here描述了迭代计数,但其他的或多或少都是有根据的猜测(例如,

./0-9A-Za-z
是带有字母
.
的常见变体),最终由成功的测试证实。

一个可能的 Python 实现是:

import hashlib
import base64

STD_B64_ALPHABET   = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
CISCO_B64_ALPHABET = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
TRANS = str.maketrans(STD_B64_ALPHABET, CISCO_B64_ALPHABET)

def b64CiscoEncode(data):
    return base64.b64encode(data).decode('ascii').translate(TRANS).rstrip('=')

def type8Hash(salt, password):   
    return b64CiscoEncode(hashlib.pbkdf2_hmac('sha256', password, salt, 20000))

# $8$mTj4RZG8N9ZDOk$elY/asfm8kD3iDmkBe3hD2r4xcA/0oWS5V3os.O91u.
print(type8Hash(b'mTj4RZG8N9ZDOk', b'cisco')) # elY/asfm8kD3iDmkBe3hD2r4xcA/0oWS5V3os.O91u.

# $8$dsYGNam3K1SIJO$7nv/35M/qr6t.dVc7UY9zrJDWRVqncHub1PE9UlMQFs
print(type8Hash(b'dsYGNam3K1SIJO', b'cisco')) # 7nv/35M/qr6t.dVc7UY9zrJDWRVqncHub1PE9UlMQFs

成功地重现了链接示例中的哈希值。


编辑:

关于您的评论:盐是通过随机生成 Base64 编码(使用 Cisco 字母表)的 10 个字节(= 80 位)来生成的,结果为 14 个字节。类型 8 哈希密码是 8 前缀、盐和 Base64 编码的 PBKDF2 哈希的串联:

import hashlib
import base64
import os

salt = b64CiscoEncode(os.urandom(10)) # create random 10 bytes (=80 bits) salt and Base64 encode
password = b'cisco'
hash = type8Hash(salt.encode('ascii'), password) # calculate Base64 encoded PBKDF2 hash 

print("$8$%s$%s" %(salt, hash)) # concatenate 8 prefix, salt and Base64 encoded PBKDF2 hash  

如果要将哈希值重建为现有的类型 8 哈希密码,只需使用相应的盐而不是新生成的盐(如答案的第一部分所示)。


0
投票

需要考虑所需的命令,启用算法类型 sha256 加密密码。没有它,就无法完成。

© www.soinside.com 2019 - 2024. All rights reserved.