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

JavaScript简易密码加密问题:仅输出首个加密字符,求排查

问题分析与解决方案

兄弟,我一眼就发现问题所在了——你的return encryptedPassword;语句放错位置啦!它被写在了外层的for循环内部,这就导致函数在处理完密码的第一个字符后,直接就返回结果了,后面的字符根本没机会进入循环处理,自然只能输出加密后的首个字符。

错误根源

看这段代码的核心结构:

for (var i=0; i < password.length; i++){ 
    // ... 单个字符的加密逻辑
    return encryptedPassword; // 这里是坑!循环第一次执行就直接终止函数
} 

外层循环本应该遍历密码的每一个字符,但每次循环到最后都触发了return,函数直接终止,后续的循环迭代完全没机会执行。

修正后的代码

只需要把return encryptedPassword;移到外层for循环的外面,让循环完整遍历所有字符后再返回最终结果:

function crypto(){ 
    var password = "Pizza2Day"; 
    var flag = 0; 
    var encryptedPassword= ""; 
    var originalValues = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; 
    var encryptedValues = ["m", "h","t","f","g","k","b","p","j","w","e","r","q","s","l","n","i","u","o","x","z","y","v","d","c","a"]; 
    for (var i=0; i < password.length; i++){ 
        flag=0; 
        for (var r = 0; r < originalValues.length; r++){ 
            if (originalValues[r] == password.charAt(i)){ 
                encryptedPassword += encryptedValues[r]; 
                flag = 1; 
                break; 
            } else if (originalValues[r].toUpperCase() == password.charAt(i)) { 
                encryptedPassword += encryptedValues[r].toUpperCase(); 
                flag = 1; 
                break; 
            } 
        } 
        if (flag == 0) { 
            encryptedPassword += password.charAt(i); 
        } 
    } 
    return encryptedPassword; // 移到循环外面,等所有字符处理完再返回
} 
console.log("New Password: " + crypto());

现在运行代码,就能得到完整的加密密码了。

额外优化建议

你现在用双重循环查找字符,效率有点低,其实可以把字符映射做成一个对象,这样查找速度更快,代码也更简洁:

function crypto(){ 
    var password = "Pizza2Day"; 
    var encryptedPassword= ""; 
    // 直接创建小写字符的映射对象,查找效率从O(n)提升到O(1)
    const charMap = {
        'a':'m', 'b':'h', 'c':'t', 'd':'f', 'e':'g', 'f':'k', 'g':'b', 'h':'p',
        'i':'j', 'j':'w', 'k':'e', 'l':'r', 'm':'q', 'n':'s', 'o':'l', 'p':'n',
        'q':'i', 'r':'u', 's':'o', 't':'x', 'u':'z', 'v':'y', 'w':'v', 'x':'d',
        'y':'c', 'z':'a'
    };

    for (var i=0; i < password.length; i++){ 
        const char = password.charAt(i);
        const lowerChar = char.toLowerCase();
        // 检查字符是否在映射表中
        if (charMap.hasOwnProperty(lowerChar)) {
            // 根据原字符的大小写返回对应加密结果
            encryptedPassword += char === lowerChar ? charMap[lowerChar] : charMap[lowerChar].toUpperCase();
        } else {
            // 非字母字符直接保留
            encryptedPassword += char;
        }
    } 
    return encryptedPassword;
} 
console.log("New Password: " + crypto());

内容的提问来源于stack exchange,提问作者Sock Monkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:35:07