@chuyi,virt-manager,可以从软件源安装。
@Curtion,嗯确实,相当于我用语言调整了它的参数。
继续PHP:
这个回答其实很不错,我没告诉它要修复trim,它也修复了。
最后它真的修好了,结果完全正确。
<?php echo "FinalShell-Keygen v1.0 - Developed by UltraPanda\n* Only for educational purpose *\n请输入离线激活所提供的机器码: "; $hardwareId = trim(fgets(STDIN)); echo "高级版激活码: " . transform("\u{ef79}" . $hardwareId . "8552") . "\n"; echo "专业版激活码: " . transform("2356" . $hardwareId . "13593") . "\n"; function transform($str) { return substr(hashMD5($str), 8, 16); } function hashMD5($str) { return md5($str); }
至于golang,在经我两次提醒之后,ChatGPT给出了完全正确的结果:
package main import ( "bufio" "fmt" "crypto/md5" "os" "strings" ) func main() { reader := bufio.NewReader(os.Stdin) fmt.Println("FinalShell-Keygen v1.0 - Developed by UltraPanda\n* Only for educational purpose *\n请输入离线激活所提供的机器码: ") hardwareId, _ := reader.ReadString('\n') hardwareId = strings.TrimSpace(hardwareId) fmt.Printf("高级版激活码: %s\n专业版激活码: %s\n", transform("\U0000ef79" + hardwareId + "8552"), transform("2356" + hardwareId + "13593")) } func transform(str string) string { return hashMD5(str)[8:24] } func hashMD5(str string) string { hashed := md5.Sum([]byte(str)) sb := "" for _, b := range hashed { len := int(b) & 255 if len < 16 { sb += "0" } sb += fmt.Sprintf("%x", len) } return sb }
只是可惜它给的结果是错误的,与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里压缩卷就能把文件系统变小
