miyalian 发布的文章

Docker官网被墙,直连速度极慢,故此设置docker代理以加速

1.Docker代理

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

[Service]
Environment="HTTP_PROXY=http://192.168.31.187:7897/"
Environment="HTTPS_PROXY=http://192.168.31.187:7897/"
## Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

其中192.168.31.187:7897换成你的具体的代理地址,以下同理

2.Container代理

在容器运行阶段,如果需要代理上网,则需要配置 ~/.docker/config.json。以下配置,只在Docker 17.07及以上版本生效。

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.31.187:7897",
     "httpsProxy": "http://192.168.31.187:7897",
##     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}

3.Docker Build 代理

docker build . \
    --build-arg "HTTP_PROXY=http://192.168.31.187:7897/" \
    --build-arg "HTTPS_PROXY=http://192.168.31.187:7897/" \
##    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

最后,重启docker生效

sudo systemctl daemon-reload
sudo systemctl restart docker

DD脚本合集 一键安装Windows/Debian/Ubuntu/CentOS

无需DD系统VPS通过Docker直接运行Windows,查看Windows Qemu镜像 >>

安装重装系统的前提组件

Debian/Ubuntu:

apt-get install -y xz-utils openssl gawk file wget screen && screen -S os

RedHat/CentOS:

yum install -y xz openssl gawk file glibc-common wget screen && screen -S os

如果出现异常,请刷新Mirrors缓存或更换镜像源。
RedHat/CentOS:

yum makecache && yum update -y

Debian/Ubuntu:

apt update -y && apt dist-upgrade -y

一键智能安装脚本

  • 一键DD脚本,支持性好,更智能更全面,支持国内外各种VPS重装,特别是对国内各种访问国外资源慢的VPS安装有奇效。
  • 支持debian11.
  • 发现很多人不知道怎么DD甲骨文,使用支持uefi的镜像包即可.脚本已添加3个甲骨文专用选项23-25.
wget --no-check-certificate -O AutoReinstall.sh https://d.02es.com/AutoReinstall.sh && chmod a+x AutoReinstall.sh && bash AutoReinstall.sh

DD安装界面
输入Y确认DD后主机自动获取IP,N则自行设置IP 输入N后会自动检测出主机现用IP,如果正确可以按Y确认使用,如不正确则按N自行按正确的输入。
DD安装界面-选择系统
25合1的系统一键DD选择界面,输入99则使用自定义镜像。 以上系统密码不为默认密码的均为网络收集,如有疑虑使用自己的自定义镜像。

25合一系统密码:
1、CentOS 7.7 (已关闭防火墙及SELinux,默认密码Pwd@CentOS)
2、CentOS 7 (默认密码cxthhhhh.com)
3、CentOS 8 (默认密码cxthhhhh.com)
4、CentOS 6 (默认密码Minijer.com)
5、Debian 11 (默认密码Minijer.com)
6、Debian 10 (默认密码Minijer.com)
7、Debian 9 (默认密码Minijer.com)
8、Debian 8 (默认密码Minijer.com)
9、Ubuntu 20.04 (默认密码Minijer.com)
10、Ubuntu 18.04 (默认密码Minijer.com)
11、Ubuntu 16.04 (默认密码Minijer.com)
12、Windows Server 2019 (默认密码cxthhhhh.com)
13、Windows Server 2016 (默认密码cxthhhhh.com)
14、Windows Server 2012 (默认密码cxthhhhh.com)
15、Windows Server 2012 Lite (默认密码nat.ee)
16、Windows Server 2008 (默认密码cxthhhhh.com)
17、Windows Server 2008 Lite (默认密码nat.ee)
18、Windows Server 2003 (默认密码cxthhhhh.com)
19、Windows Server 2003 Lite (默认密码WinSrv2003x86-Chinese)
20、Windows 10 LTSC Lite (默认密码www.nat.ee)
21、Windows 7 x86 Lite (默认密码Windows7x86-Chinese)
22、Windows 7 Ent Lite (默认密码nat.ee)
23、Windows 7 Ent Lite (UEFI支持甲骨文)(默认密码nat.ee)
24、Windows Server 2008 Lite (UEFI支持甲骨文)(默认密码nat.ee)
25、Windows Server 2012 Lite (UEFI支持甲骨文)(默认密码nat.ee)
99、自定义镜像


注意:
经测试在谷歌云原版系统基础上DD会出现自动获取的子网掩码为255.255.255.255,如出现这种情况需要手工输入改正为正确的如255.255.255.0,否则会安装完成主机可能会离线。
Oracle Cloud(甲骨文云)可选择23-25一键DD,注意基础系统最好选择Ubuntu,如原系统是CentOS可能无法成功。

萌咖一键安装脚本

实测支持virmach系统下直接dd系统.

全自动安装默认root密码:MoeClub.org,安装完成后请立即更改密码.

能够全自动重装Debian/Ubuntu/CentOS等系统.

同时提供dd安装镜像功能,例如: 全自动无救援dd安装windows系统

全自动安装CentOS时默认提供VNC功能,可使用VNC Viewer查看进度,

VNC端口为 1 或者 5901 ,可自行尝试连接.(成功后VNC功能会消失.)

目前CentOS系统只支持任意版本重装为 CentOS 6.x 及以下版本.

特别注意:OpenVZ构架不适用.

wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && chmod +x InstallNET.sh
# bash InstallNET.sh +安装命令

DD debian 10示例

wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh  -d 10 -v 64 -p "自定义root密码" -port "自定义ssh端口"

DD ubuntu 20.04示例

wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh  -u 20.04 -v 64 -p "自定义root密码" -port "自定义ssh端口"

下载及说明:

Usage:
        bash InstallNET.sh      -d/--debian [dist-name]
                                -u/--ubuntu [dist-name]
                                -c/--centos [dist-version]
                                -v/--ver [32/i386|64/amd64]
                                --ip-addr/--ip-gate/--ip-mask
                                -apt/-yum/--mirror
                                -dd/--image
                                -a/-m
 
# dist-name: 发行版本代号
# dist-version: 发行版本号
# -apt/-yum/--mirror : 使用定义镜像
# -a/-m : 询问是否能进入VNC自行操作. -a 为不提示(一般用于全自动安装), -m 为提示.

使用示例:

#使用默认镜像全自动安装
bash InstallNET.sh -d 8 -v 64 -a
bash InstallNET.sh -d 9 -v 64 -a
bash InstallNET.sh -d 10 -v 64 -a
分别表示自动安装Debian 8x64  9x64 10x64
 
#使用自定义镜像全自动安装
bash InstallNET.sh -c 6.9 -v 64 -a --mirror 'http://mirror.centos.org/centos'
 
 
# 以下示例中,将X.X.X.X替换为自己的网络参数.
# --ip-addr :IP Address/IP地址
# --ip-gate :Gateway   /网关
# --ip-mask :Netmask   /子网掩码
 
#使用自定义镜像自定义网络参数全自动安装
#bash InstallNET.sh -u 16.04 -v 64 -a --ip-addr x.x.x.x --ip-gate x.x.x.x --ip-mask x.x.x.x --mirror 'http://archive.ubuntu.com/ubuntu'
 
#使用自定义网络参数全自动dd方式安装
#bash InstallNET.sh --ip-addr x.x.x.x --ip-gate x.x.x.x --ip-mask x.x.x.x -dd 'https://moeclub.org/get-win7embx86-auto'
 
#使用自定义网络参数全自动dd方式安装存储在谷歌网盘中的镜像(调用文件ID的方式)
#bash InstallNET.sh --ip-addr x.x.x.x --ip-gate x.x.x.x --ip-mask x.x.x.x -dd "$(echo "1cqVl2wSGx92UTdhOxU9pW3wJgmvZMT_J" |xargs -n1 bash <(wget --no-check-certificate -qO- 'https://moeclub.org/get-gdlink'))"
 
#使用自定义网络参数全自动dd方式安装存储在谷歌网盘中的镜像
#bash InstallNET.sh --ip-addr x.x.x.x --ip-gate x.x.x.x --ip-mask x.x.x.x -dd "$(echo "https://drive.google.com/open?id=1cqVl2wSGx92UTdhOxU9pW3wJgmvZMT_J" |xargs -n1 bash <(wget --no-check-certificate -qO- 'https://moeclub.org/get-gdlink'))"

自定义DD包地址

示例脚本,补全DD包直连地址后运行即可;

# DD Windows Server 2008 R2 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2008R2_sp1_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2012 R2 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2012R2_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2016 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2016_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2019 64位 精简版 [账户Administrator密码WinSrv2019dc-Chinese]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2019_64_Administrator_WinSrv2019dc-Chinese.gz'
 
# DD Windows Server 2022 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2022_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2022 64位 DataCenter版 [账户Administrator密码DataCenter]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Disk_Windows_Server_2022_DataCenter_CN_v2.12.vhd.gz'
 
# DD Windows7 32位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win7_86_Administrator_nat.ee.gz'
 
# DD Windows7 sp1 64位 企业精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win7_sp1_64_Administrator_nat.ee.gz'
 
# DD Windows8.1 64位 专业精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win8.1_64_Administrator_nat.ee.gz'
 
# DD Windows10 2016LTSB 64位 企业深度精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win10_2016LTSB_64_Administrator_nat.ee.gz'
 
# DD Windows10 2019LTSC 64位 企业适量精简版 [账户Administrator密码Vicer]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win10_2019LTSC_64_Administrator_Vicer.gz'

精简版DD包

如果没有自己的DD包,可以使用博主提供的包,从以下版本中选择自己需要的系统,然后输入一键脚本即可;

# DD Windows Server 2008 R2 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2008R2_sp1_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2012 R2 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2012R2_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2016 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2016_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2019 64位 精简版 [账户Administrator密码WinSrv2019dc-Chinese]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2019_64_Administrator_WinSrv2019dc-Chinese.gz'
 
# DD Windows Server 2022 64位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win_Server2022_64_Administrator_nat.ee.gz'
 
# DD Windows Server 2022 64位 DataCenter版 [账户Administrator密码DataCenter]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Disk_Windows_Server_2022_DataCenter_CN_v2.12.vhd.gz'
 
# DD Windows7 32位 精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win7_86_Administrator_nat.ee.gz'
 
# DD Windows7 sp1 64位 企业精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win7_sp1_64_Administrator_nat.ee.gz'
 
# DD Windows8.1 64位 专业精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win8.1_64_Administrator_nat.ee.gz'
 
# DD Windows10 2016LTSB 64位 企业深度精简版 [账户Administrator密码nat.ee]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win10_2016LTSB_64_Administrator_nat.ee.gz'
 
# DD Windows10 2019LTSC 64位 企业适量精简版 [账户Administrator密码Vicer]
wget --no-check-certificate -qO InstallNET.sh 'https://d.02es.com/InstallNET.sh' && bash InstallNET.sh -dd 'https://d.02es.com/Windows/Win10_2019LTSC_64_Administrator_Vicer.gz'

救援模式下直接DD系统镜像

进入救援模式,连接救援模式下的服务器,首先执行以下命令:

fdisk -l

找到与系统硬盘容量匹配的盘位置名称,替换下方的“sda”,同时替换“DD ISO URL”为 DD 镜像的地址

wget -O- "DD ISO URL" | gunzip | dd of=/dev/sda

例如:wget -O- "http://d.02es.com/win/lite/win7-ent-sp1-x64-cn/win7-ent-sp1-x64-cn.vhd.gz" --no-check-certificate | gunzip | dd of=/dev/vda

准备完毕,执行替换后的命令开始 DD 系统。 注意在 DD 完成后,要再次返回后台,退出救援模式,等待 DD 后的系统启动即可。有些设备可能需要连接VNC,手动配置IP信息。

精简版win2016、2019 DD镜像(3.3GB~3.8GB) - From Teddysun

进入救援模式,连接救援模式下的服务器,首先执行以下命令:

fdisk -l

找到与系统硬盘容量匹配的盘位置名称,替换下方的“sda”,以下包含两种语言的win系统,可根据需要自主选择:

wget -O- "https://d.02es.com/os/cn_win2016.xz" --no-check-certificate | xzcat | dd of=/dev/sda
wget -O- "https://d.02es.com/os/cn_win2019.xz" --no-check-certificate | xzcat | dd of=/dev/sda
wget -O- "https://d.02es.com/os/en_win2016.xz" --no-check-certificate | xzcat | dd of=/dev/sda
wget -O- "https://d.02es.com/os/en_win2019.xz" --no-check-certificate | xzcat | dd of=/dev/sda

Windows服务器开启Ping功能

打开系统运行服务 Win+R 输入命令

## 开启Ping
netsh firewall set icmpsetting 8
## 关闭Ping
netsh firewall set icmpsetting 8 disable

常用工具下载

密码为根域名

https://d.02es.com/tool.zip

特别感谢:Vicer、cxt、hiCasper、Teddysun等各位技术大佬的脚本,站长只是脚本的"搬运工"。

版权申明:以上所有脚本、系统均为网络收集,站长不对资源的安全及版权纠纷负责,如有侵犯您的权益欢迎联系。

iredmail搭建过程中默认安装了nftables,配置文件在路径为/etc/nftables.conf,以开放5000端口为例
只需修改此文件,在

    type filter hook input priority 0;

下面加上行

    # 允许5000端口
    tcp dport 5000 accept

并注释掉

   # count and drop any other traffic
   # counter drop

两行,之后重启nftables
运行命令

   nft -f /etc/nftables.conf

即可。

适用于搭载MT7620、MT7621、MT7628芯片的小米路由器。

1. python版

将下面的内容保存为sn2pass.py文件

import sys
import hashlib
 
salt = {
    'r1d': 'A2E371B0-B34B-48A5-8C40-A7133F3B5D88',
    'others': '6D2DF50A-250F-4A30-A5E6-D44FB0960AA0',
}
 
 
def main():
    try:
        sn = sys.argv[1]
    except IndexError:
        sn = input('请输入SN码: ')
 
    print(get_pass(sn))
 
 
def get_pass(sn: str):
    # SN码加盐后进行md5加密取前八位字符串返回
    return hashlib.md5((sn + get_salt(sn)).encode()).hexdigest()[:8]
 
 
def get_salt(sn):
    # 通过判断字符串中是否含有/来获取对应的盐
    if '/' in sn:
        return salt['others'].lower()
    return salt['r1d']
 
 
if __name__ == '__main__':
    main()

使用方法:

打开cmd窗口,运行

python sn2pass.py SN码

或直接运行

python sn2pass.py

回车后输入SN码

2. html版

将下面的内容保存为sn2pass.html文件

<!DOCTYPE html>
<html>
<body>
<script>
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
 
/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */
 
/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
 
/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}
 
/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;
 
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
 
  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
 
    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);
 
    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
 
    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
 
    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
 
    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);
 
}
 
/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
 
/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
 
  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }
 
  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}
 
/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}
 
/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}
 
/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}
 
/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}
 
/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}
 
/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}
</script>
<h1>小米路由器SSH ROOT密码计算器</h1>
 
<p>输入SN:<input type='textbox' id='sn' /> <button onclick='calc()' title='CALC' text='CALC'>CALC</button></p> 
 
<p id="PWD"></p>
 
<script>
let r1d_salt="A2E371B0-B34B-48A5-8C40-A7133F3B5D88";
// Salt must be reversed for non-R1D devices
let others_salt="d44fb0960aa0-a5e6-4a30-250f-6d2df50a";
others_salt=others_salt.split('-').reverse().join("-");
function calc()
{
    let sn = document.getElementById("sn").value;
    document.getElementById("PWD").innerHTML = hex_md5(sn + (sn.indexOf("/") > 0 ? others_salt : r1d_salt)).substr(0,8);
}
</script>
 
</body>
</html>

使用方法:

双击sn2pass.html文件,输入sn码后点击CALC键即可生成。