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

如何修复JavaScript中凯撒密码+大小写反转的密码哈希函数错误

问题修复方案

你代码的问题和嵌套函数无关,主要存在三处核心逻辑错误:

错误原因

  • 外层字符类型判断逻辑错误:password的每个字符都是字符串类型,typeof password[i] === typeof str的判断永远为真,数字字符永远不会进入你写的数字处理分支,这是你得到错误返回值的核心原因。
  • shift函数大小写判断错误:if (char.toUpperCase(text[i]))会永远返回真,所有字母都会按照大写ASCII规则计算移位,小写字母移位结果完全错误,同时result变量未声明属于隐式全局变量,可能引发变量污染。
  • 数字处理逻辑错误:就算进入数字分支,字符串类型的数字直接和x相加会做字符串拼接而非数值计算,结果不符合预期。

修复后代码

function hashPassword(password, x) {
  // password is a string, x is a number
  // return a string
  // (ex. password = 'ab1By', x = 3 so it should return "DE4eB")
  function shift(text, s) {
    let result = ""; // 补全变量声明
    for (let i = 0; i < text.length; i++) {
      let char = text[i];
      // 修改大小写判断逻辑
      if (char === char.toUpperCase()) {
        let ch = String.fromCharCode((char.charCodeAt(0) + s - 65) % 26 + 65);
        result += ch;
      } else {
        let ch = String.fromCharCode((char.charCodeAt(0) + s - 97) % 26 + 97);
        result += ch;
      }
    }
    return result;
  }

  function reversecase(x) {
    var output = '';
    for (var i = 0, len = x.length; i < len; i++) {
      var character = x[i];
      if (character == character.toLowerCase()) {
        output = output + character.toUpperCase();
      } else {
        output = output + character.toLowerCase();
      }
    }
    return output
  }

  var result = "";
  for (var i = 0; i < password.length; i++) {
    let curChar = password[i];
    // 修改字符类型判断逻辑,用正则判断是否为字母
    if (/[a-zA-Z]/.test(curChar)) {
      let char = shift(curChar, x)
      let charcode = reversecase(char)
      result += charcode;
    } else {
      // 字符串数字先转数值再做加法
      let num = Number(curChar) + x
      let number = num % 10
      result += number.toString()
    }
  }
  return result
};
console.log(hashPassword("abcd4321", 4)) // 输出 EFGH8765

说明

按你给出的示例ab1By+偏移3返回DE4eB的逻辑,数字是做加偏移处理,所以abcd4321加偏移4的正确输出是EFGH8765,如果你需要的是数字减偏移,可以把数字处理部分的加法改成减法即可匹配你说的EFGH7654预期。

内容的提问来源于stack exchange,提问作者Davon Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:36:05