2个不稳定版本
0.5.0 | 2024年5月5日 |
---|---|
0.4.0 | 2024年4月24日 |
0.3.0 |
|
0.2.3 |
|
0.1.7 |
|
#239 in 认证
87 每月下载次数
用于 rspotd-cli
19KB
308 行
RsPOTD
Rust库,用于生成与ARRIS兼容的每日密码。灵感来自 arrispwgen。
原始作者在分析调制解调器后基本上逆向工程了算法。非常感谢 @borfast 做的这项了不起的工作。基于我的需求和特定的种子,我遇到了一些特定的问题,希望这个项目可以纠正这些问题。
首先,上游项目似乎将您锁定在8-10个字符的种子之间。实际上,生成这些密码的原始ARRIS工具仅允许4-8个字符的种子。 (考虑到默认的ARRIS种子长度为10个字符,我觉得这很奇怪)
其次,如果您提供一个少于10个字符的种子,上游项目将显示相同数量的字符的密码。所以一个8个字符的种子将产生密码的 正确 的前8个字符,但不会提供 完整的 密码。
第三,如果您提供一个少于8个字符的种子,上游项目似乎不会输出任何内容。ARRIS处理种子的方式是迭代种子,将每个字符追加到提供的种子末尾。例如,“ABCD”是一个 有效种子,但实际上它将变成“ABCDABCDAB”。
第四,尽管我非常愿意向上游项目贡献修复而不是创建分支/端口,但上游项目是用TypeScript编写的,并通过NPM打包。我没有这两种技术的经验,因此端口变得更有可行性。
用法
单个日期
generate()
函数接受两个关键字参数。
date
: 接受ISO格式的单个日期(例如,2021-07-23)seed
: 接受4到8个字符的种子
使用ARRIS默认种子
use rspotd::{generate, vals::DEFAULT_SEED};
generate("2021-07-23", DEFAULT_SEED).unwrap();
输出:O9W2Q1O16V
使用自定义种子
use rspotd::generate;
generate("2021-07-23", "ABCDABCD").unwrap();
输出:F32CAZCJLU
日期范围
generate_multiple()
函数接受开始和结束日期,以及可选的种子。
使用默认种子
use rspotd::{generate_multiple, vals::DEFAULT_SEED};
generate_multiple("2021-07-23", "2022-07-28", DEFAULT_SEED).unwrap();
输出(截断)
{
'07/23/21': 'O9W2Q1O16V',
'07/24/21': '2SEIWWLZL1',
'07/25/21': 'ZOU3MWRZN0',
...
}
使用自定义种子
use rspotd::generate_multiple;
generate_multiple("2021-07-23", "2022-07-28", "ABCDABCD").unwrap();
输出(截断)
{
'07/23/21': 'F32CAZCJLU',
'07/24/21': '95L0GFUNCC',
'07/25/21': 'CSBLM119CH',
...
}
创建种子的DES表示
创建与提供的种子对应的DES加密值的所需点分隔的十六进制字符串。
该函数提供的值可以添加到调制解调器配置文件中,具有此配置的调制解调器将随后对由创建DES加密值相同种子生成的“每日密码”做出响应。
注意:您无法从用户端配置调制解调器。您的调制解调器通常通过TFTP从您ISP基础设施内的服务器下载其配置。
如果使用默认种子,将提供默认的ARRIS/CommScope值。我还没有弄清楚他们如何使用超过8个字节的块大小生成种子DES加密值,所以我必须硬编码该值。
在官方工具中,如果您选择“使用默认种子”复选框,则不提供DES值,据我所知,该软件始终明确了解您的种子在4到8个字符之间。
对于任何给定种子的密码数量,将只存在这样一个值;调制解调器从该值推断种子。
use rspotd::seed_to_des;
seed_to_des("ASDF").unwrap();
输出
"3F.94.E2.AA.46.63.AA.78"
依赖关系
~4–5.5MB
~94K SLoC