只是可惜它给的结果是错误的,与java版结果并不一致。旧人的那个回答结果也不正确(还是语法错误:
hashMD5($str).substr(8, 16)
)。
不过我的回答犯的三个错误都比较容易修复:
- PHP不支持
\u
转义,需要使用特殊字符本身,或者其他方式表达。- 误解了substr的参数含义(第二个参数应该是长度而不是位置,所以是 24-8=16)。
- fgets获取的字符串有换行,需要trim。
@Curtion,你的答案结果不正确,要把
?
换成
(那个特殊字符本身)结果才和Java版一致。
如果在Windows上结果不同,说明Windows操作系统编码转换对字符串造成了影响,可以尝试打开“Beta版: 使用 unicode UTF-8 提供全球语言支持”选项以得到和Linux一致的结果(打开该选项会导致在界面上使用GBK的软件乱码)。
不过它还能做这种操作,方便我测试了:
加上 import 后代码应该长这样:
import java.util.Scanner; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Main { public static void main(String[] args) throws NoSuchAlgorithmException { Scanner scanner = new Scanner(System.in); System.out.println("FinalShell-Keygen v1.0 - Developed by UltraPanda\n* Only for educational purpose *\n请输入离线激活所提供的机器码: "); String hardwareId = scanner.nextLine(); System.out.printf("高级版激活码: %s\n专业版激活码: %s%n", transform('\uef79' + hardwareId + 8552), transform(2356 + hardwareId + 13593)); } public static String transform(String str) throws NoSuchAlgorithmException { return hashMD5(str).substring(8, 24); } public static String hashMD5(String str) throws NoSuchAlgorithmException { MessageDigest digest = MessageDigest.getInstance("MD5"); byte[] hashed = digest.digest(str.getBytes()); StringBuilder sb = new StringBuilder(); byte[] var4 = hashed; int var5 = hashed.length; for(int var6 = 0; var6 < var5; ++var6) { byte b = var4[var6]; int len = b & 255; if (len < 16) { sb.append("0"); } sb.append(Integer.toHexString(len)); } return sb.toString(); } }
ChatGPT给出的结果确实很惊艳:
而且不清楚它是不是知道我喜欢php-cli,所以给了我cli版的代码。
<?php function transform($str) { return substr(hashMD5($str), 8, 24); } function hashMD5($str) { return hash("md5", $str); } echo "FinalShell-Keygen v1.0 - Developed by UltraPanda\n* Only for educational purpose *\n请输入离线激活所提供的机器码: "; $handle = fopen ("php://stdin","r"); $hardwareId = fgets($handle); echo "高级版激活码: " . transform("\uef79" . $hardwareId . 8552) . "\n"; echo "专业版激活码: " . transform(2356 . $hardwareId . 13593) . "\n"; ?>
还是Linux好,文件管理器自带SFTP功能,终端也开箱即用。
@Curtion,可能是unicode转ascii(或者iso-8859-1),发现转不了就用
?
代替了。
@胡图图,可以,-o和-i参数
@511,
echo json_encode([ 'aaa' => $aaa, 'bbb' => $bbb, ], JSON_UNESCAPED_UNICODE);
@ysyvsl,点我的电脑,选M盘,选shanggujuanzhou
@ysyvsl,可以尝试,解压整合包后用
https://winegame.net/games/qi-dong-zi-ding-yi-you-xi/
启动
@ysyvsl,用启动自定义容器启动MO2
https://winegame.net/games/qi-dong-zi-ding-yi-you-xi/如果wine与MO2虚拟文件系统不兼容,请改用Vortex:
https://www.nexusmods.com/about/vortex/
https://bilibili.com/video/av588352201
@胡图图,此外,设置较大的块大小(比如1M)可以提升dd性能。
dd if=/dev/xxx of=/dev/yyy bs=1M
@胡图图,如果文件系统依然可写,在Windows里压缩卷就能把文件系统变小
@胡图图,取决于后面有没有实际数据。如果有,那么那些文件会损坏。如果没有那就没事。
@胡图图,
-USR1
信号不会让dd停止运行。
@值班电工,好像是买手机的赠品,挺好用,是我家里最好的micro-usb线了。
采集卡的两个重要参数:
• 环出分辨率/刷新率:经过采集卡连接显示器,显示器能达到的分辨率和刷新率
• 录制分辨率/刷新率:通过采集卡录制时能达到的分辨率和刷新率
受USB带宽限制,两者往往不同。比如能4K60环出不一定能4K60录制。