很可能您输入了错误的密码,因为我也遇到了类似的问题并归咎于升级。
您可以转储标题并尝试粗暴地强制它。
以下步骤可以提供帮助。
确认您拥有正确的设备:
sudo cryptsetup isLuks /dev/sda3 -v
验证标题:
sudo cryptsetup luksDump /dev/sda3
尝试最初的几个密码(考虑添加--debug
更多输出):
sudo cryptsetup luksOpen --test-passphrase /dev/sda3
或:tcryptDump
,但不应该有任何区别。
考虑备份标头:
sudo cryptsetup luksHeaderBackup /dev/sda3 --header-backup-file luksHeader.bin
或者运行(将计数替换为在标头转储中找到的有效负载偏移量):
dd if=/dev/sda3 of=luksHeader.bin bs=512 count=4096
您还可以考虑使用dd
.
使用头文件尝试不同的密码:(比使用实际设备更快)
sudo cryptsetup luksOpen --test-passphrase luksHeader.bin
蛮力
有一个小的头文件(按照上面的步骤),你可以尝试粗暴地强制它。
假设您知道您的原始密码,请创建您的潜在密码列表及其排列passes.txt
(使列表唯一sort -ou passes.txt
)。
在 shell 中,您可以使用以下脚本来尝试这些组合:
set -x
while read pass; do
printf $pass | cryptsetup luksOpen --test-passphrase luksHeader.bin $@ && echo Success && break;
done < passes.txt
笔记:
- 由于文件很小,您可以将其扩展到多台机器。
- 考虑添加
--key-slot 0
更快的检查。
- 您可以尝试覆盖
--pbkdf-force-iterations
(检查标头转储中有多少),但很可能无济于事。
现场CD
如果您认为这是由于升级而发生的,请使用不同的Ubuntu Live CD 来使用上述命令(Ubuntu 16、18、20 等)。
从 USB/CD 启动,或安装VM VirtualBox(创建 Ubuntu VM,然后加载 ISO 以从它启动)。
要将物理设备附加到VM VirtualBox(不推荐):
- 在新创建的 Ubuntu VM 中,附加 Ubuntu 的 Live CD
.iso
文件。
- 使用
VBoxManage internalcommands createrawvmdk
命令创建.vmdk
指向真实设备的文件。将这些附加.vmdk
到 VM 中(在启动之前)。
- 如果您的用户在运行期间无法访问这些特殊设备,请
VirtualBoxVM
以 root 身份运行(也不推荐)。
最后一步,复制头文件,然后使用旧版本的cryptsetup
( cryptsetup --version
) 测试密码。
安装
成功后,使用以下命令挂载文件系统:
sudo cryptsetup isLuks /dev/sdb5 -v
sudo cryptsetup luksOpen /dev/sdb5 newhd
sudo lvscan # Check if LVs are active.
sudo vgchange -ay # Activate LVs if not active.
sudo lvdisplay # List logical volumes (note the LV Path).
sudo mount /dev/ubuntu-vg/root /mnt
mount # List mounted filesystems.
xdg-open /mnt # Open in file explorer