java大佬帮忙翻译成go或者php或者js代码

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();
    }
}

回复列表(20)
  • @Ta / 01-09 12:18 / /
    
    package main
    
    import (
    	"crypto/md5"
    	"fmt"
    )
    
    func main() {
    	var hardwareId string
    	fmt.Println("FinalShell-Keygen v1.0 - Developed by UltraPanda\n* Only for educational purpose *\n请输入离线激活所提供的机器码: ")
    	fmt.Scanf("%s", &hardwareId)
    	fmt.Println("高级版激活码: ", transform("?"+hardwareId+"8552"), "\n专业版激活码: ", transform("2356"+hardwareId+"13593"))
    }
    
    func transform(str string) string {
    	return hashMD5(str)[8:24]
    }
    
    func hashMD5(str string) string {
    	return fmt.Sprintf("%x", md5.Sum([]byte(str)))
    }
    
    
    

    虽然不太懂JAVA,但是原代码应该是有问题的,\uef79+hardwareId后,string的第一个字节居然是3f,所以虽然不知道为什么,但是在转成golang的时候只需要拼接?就行了
    红米K30 Pro(变焦版)

  • @Ta / 01-09 14:02 / /

    @Curtion,可能是unicode转ascii(或者iso-8859-1),发现转不了就用?代替了。

  • hik
    @Ta / 01-09 15:33 / /
    <?php

    $hardwareId = $_GET['hardwareId'];

    echo "高级版激活码: " . transform("" . $hardwareId . 8552) . "\n";
    echo "专业版激活码: " . transform(2356 . $hardwareId . 13593) . "\n";

    function transform($str) {
      return substr(md5($str), 8, 16);
    }


    请求:http://127.0.0.1/test.php?hardwareId=123456
    还是用了特殊字符,否则高级激活码与java代码结果不一致。
  • @Ta / 01-09 16:15 / /
    <!DOCTYPE html>
    <html>
    <head>
      <title>FinalShell Keygen</title>
    </head>
    <body>
      <h1>FinalShell-Keygen v1.0 - Developed by UltraPanda</h1>
      <p>* Only for educational purpose *</p>
      <?php
      if (isset($_POST['hardwareId'])) {
        $hardwareId = $_POST['hardwareId'];
        $advancedCode = transform('\uef79' . $hardwareId . 8552);
        $professionalCode = transform(2356 . $hardwareId . 13593);
      ?>
        <p>高级版激活码: <?php echo $advancedCode ?></p>
        <p>专业版激活码: <?php echo $professionalCode ?></p>
      <?php
      } else {
      ?>
        <p>请输入离线激活所提供的机器码:</p>
        <form action="" method="post">
          <input name="hardwareId" type="text" />
          <input type="submit" value="生成激活码" />
        </form>
      <?php
      }
      ?>
    </body>
    </html>
    
    <?php
    function transform($str) {
      return hashMD5($str).substr(8, 16);
    }
    
    function hashMD5($str) {
      return md5($str);
    }
    ?>
    
    
    

    chatgpt给出的PHP版本

  • hik
    @Ta / 01-09 15:09 / /
    @老虎会游泳,应该是特殊字符无法显示所以是?,我从IDEA编辑器复制粘贴 \uef79 到vscode,vs自动转换成了  符号(vscode中看是一个框里面一个问号)。
  • @Ta / 01-10 13:01 / /

    ChatGPT给出的结果确实很惊艳:

    图片.png(121.19 KB)

    而且不清楚它是不是知道我喜欢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";
    
    ?>
    
  • @Ta / 01-10 13:42 / /

    只是可惜它给的结果是错误的,与java版结果并不一致。旧人的那个回答结果也不正确(还是语法错误:hashMD5($str).substr(8, 16))。

    图片.png(34.08 KB)

    不过我的回答犯的三个错误都比较容易修复:

    1. PHP不支持\u转义,需要使用特殊字符本身,或者其他方式表达。
    2. 误解了substr的参数含义(第二个参数应该是长度而不是位置,所以是 24-8=16)。
    3. fgets获取的字符串有换行,需要trim。

    图片.png(109.45 KB)

  • @Ta / 01-10 13:21 / /

    不过它还能做这种操作,方便我测试了:
    图片.png(39.78 KB)
    图片.png(64.6 KB)

    加上 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();
        }
    }
    
  • @Ta / 01-10 13:39 / /

    @Curtion,你的答案结果不正确,要把?换成(那个特殊字符本身)结果才和Java版一致。
    如果在Windows上结果不同,说明Windows操作系统编码转换对字符串造成了影响,可以尝试打开“Beta版: 使用 unicode UTF-8 提供全球语言支持”选项以得到和Linux一致的结果(打开该选项会导致在界面上使用GBK的软件乱码)。

    图片.png(85.19 KB)

  • @Ta / 01-10 13:49 / /

    至于golang,在经我两次提醒之后,ChatGPT给出了完全正确的结果:

    图片.png(112.53 KB)图片.png(82.29 KB)图片.png(55.37 KB)图片.png(79.59 KB)

    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
    }
    
  • @Ta / 01-10 13:56 / /

    继续PHP:

    图片.png(96.3 KB)

    这个回答其实很不错,我没告诉它要修复trim,它也修复了。

    图片.png(71.62 KB)

    图片.png(126.09 KB)

    图片.png(99.02 KB)

    最后它真的修好了,结果完全正确。

    <?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);
    }
    
  • @Ta / 01-10 15:56 / /

    @老虎会游泳

    经过我的测试,是的,应该是我本地编码的问题,我使用JDK11运行时控制台打印的乱码,输出的结果也不正确,我昨天就是这样测试的,只不过当时忽略了乱码的事情,毕竟这种现象司空见惯了。

    刚刚我使用了JDK19再次进行测试,发现控制台打印已经正常了,输出的结果也变得正常。

    QQ截图20230110155140.png(58.09 KB)

    现在的问题变成了为什么会这样...
    红米K30 Pro(变焦版)

  • @Ta / 01-10 16:08 / /

    @老虎会游泳

    ChatGPT似乎没有能力来判断用户说的是否正确,它只会顺着说,而不是进行纠正,例如,golang能够支持\uef79写法

    QQ截图20230110155140.png(194.51 KB)
    红米K30 Pro(变焦版)

  • hik
    @Ta / 01-10 16:19 / /
    chatgpt小程序员的福音,但是可能会让某些公司变相增加普通程序员工作量,因为程序员完成小需求效率变高了
  • @Ta / 01-10 16:34 / /

    @Curtion,嗯确实,相当于我用语言调整了它的参数。

  • @Ta / 01-12 17:26 / /

    看样子以后没你们啥事了。chatgpt就搞定了
    小米8(白)

  • @Ta / 01-12 17:27 / /

    @老虎会游泳,哪里能玩玩chatgpt?,让它帮我生成代码
    小米8(白)

  • @Ta / 01-12 17:40 / /

    @艾木友尔尔巴,官网:https://chat.openai.com/ 需要自己想办法获取访问资格。
    前几天别人建的免登录反向代理 https://gpt.chatapi.art 现在已经用不了了。

  • @Ta / 01-14 10:53 / /

    @胡椒舰长,没啥用吧。
    一加8Pro

添加新回复
回复需要登录