You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET转Java:字符串加密逻辑代码迁移正确性咨询

VB.NET加密逻辑迁移到Java的问题解答

首先,你的现有Java代码和原VB.NET代码存在逻辑不一致的地方,还有未完成的部分,我来帮你梳理并补全:

现有Java代码的问题点

  • 循环范围错误:原VB.NET代码的For i As Int32 = 0 To asciis.Length - 1会遍历数组的所有元素;但你的Java代码写的是for (int i =0; i<asciis.length-1;i++),这会漏掉最后一个元素(索引为asciis.length-1的元素),必须把循环条件改成i < asciis.length。
  • 编码未明确指定:原VB.NET用的是ASCII编码处理字节数组,但Java的name.getBytes()默认会使用系统编码,可能和ASCII不一致,需要明确指定StandardCharsets.US_ASCII。

补全后的完整Java代码

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class EncryptionHelper {
    public static String encryptName(String name) throws Exception {
        // 对应VB.NET的System.Text.Encoding.ASCII.GetBytes(name)
        byte[] asciis = name.getBytes(StandardCharsets.US_ASCII);
        
        // 修正循环,遍历所有字节并执行+1操作
        for (int i = 0; i < asciis.length; i++) {
            asciis[i] = (byte) (asciis[i] + 1);
        }
        
        // 对应VB.NET的System.Text.Encoding.ASCII.GetString
        String asciiConverted = new String(asciis, StandardCharsets.US_ASCII);
        
        // 对应VB.NET的Uri.EscapeDataString,指定ASCII编码保证逻辑一致
        String urlEncoded = URLEncoder.encode(asciiConverted, StandardCharsets.US_ASCII.name());
        
        // 对应VB.NET的StrReverse,反转字符串
        String encryptedName = new StringBuilder(urlEncoded).reverse().toString();
        
        return encryptedName;
    }
}

代码对应关系说明

  • name.getBytes(StandardCharsets.US_ASCII):和VB.NET的Encoding.ASCII.GetBytes完全匹配,确保只使用ASCII编码转换字节数组。
  • 修正后的循环:每个字节都执行+1操作,和原VB逻辑完全一致。
  • new String(asciis, StandardCharsets.US_ASCII):对应VB.NET将字节数组转回ASCII字符串的操作。
  • URLEncoder.encode(...):对应VB.NET的Uri.EscapeDataString,两者都是对URL不安全字符进行百分号编码,指定ASCII编码避免跨平台的编码差异。
  • new StringBuilder(urlEncoded).reverse().toString():对应VB.NET的StrReverse方法,实现字符串反转功能。

内容的提问来源于stack exchange,提问作者Burst of Ice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:48:30