需要将一批系统导入到secureCRT 7中,如果不涉及用户密码的处理,处理过程是比较简单的,在scrt安装目录的sessions文件夹中,读取一个ini文件,以之为模板,将S:"HOstname"= 和 S:"Username"= 后的值,修改为要导入的系统即可。
如果需要将密码也同时写入,则需要将密码进行加密,写入S:"Password"=这个字段,并且要在加密字串前加上一个u的标记。经过网上的搜索,发现有将secureCRT 7 版本的ini中密码进行解密的资料,如 http://www.361way.com/securecrt-decrypt/6335.html 的这篇文章。有了解密方法,是否可以反其道而行,得到加密方法呢?尝试了一下,结果是肯定的。
核心是使用 5F B0 45 A2 94 17 D9 16 C6 C6 A2 FF 06 41 82 B7 和 24 A6 3D DE 5B D3 B3 82 9C 7E 06 F4 08 16 AA 07 这两串KEY进行两次Blowfish加密。源码如下,在python 3.7上运行通过,供需要的人士参考。注意,测试的密码是13位的,较长的密码,程序可能需要修改。
虽然解密方法只对7版本的secureCRT有效,但加密却无需考虑版本问题。因为8版本会对旧版ini进行更新,所以只需要用7版本的Ini模板生成的配置文件放到8的session目录下,也是可以工作的。
def encrypt(password):
c1 = Blowfish.new(bytes.fromhex('5F B0 45 A2 94 17 D9 16 C6 C6 A2 FF 06 41 82 B7'.replace(' ','')), Blowfish.MODE_CBC, b'\x00'*8)
c2 = Blowfish.new(bytes.fromhex('24 A6 3D DE 5B D3 B3 82 9C 7E 06 F4 08 16 AA 07'.replace(' ','')), Blowfish.MODE_CBC, b'\x00'*8)
padded = bytes()
for x in password:
padded += x.encode() + b'\x00' #密码以\x00分割
padded += b'\x00\x00' #添加密码结束标志
plen = 8 - (len(padded) % 8)
for x in range(0,plen):
padded += str(x).encode() #补齐8的整数倍长度,填充的数据随便即可
en1 = c1.encrypt(padded)
en1 = b'1234'+en1+b'5678' #对第一次加密的数据,前后添加4字节数据,填充数据随便即可
en2 = c2.encrypt(en1)
return en2.hex()