WTelegramClient设置2FA绑定邮箱遇PASSWORD_HASH_INVALID错误求助
解决Telegram 2FA绑定邮箱时的PASSWORD_HASH_INVALID错误
你的代码存在几个关键错误导致了该问题,以下是修正方案:
问题分析
- 旧密码Hash生成错误:你错误地将
new_password传入生成旧密码Hash的InputCheckPassword调用,若账号已有密码,必须用当前旧密码生成对应Hash;首次设置2FA时,旧密码Hash应为null。 - 非法篡改
current_algo:手动将accountPwd.current_algo设为null会破坏密码Hash生成逻辑,生成新密码Hash需使用accountPwd.new_algo。 - 异常处理逻辑无效:捕获异常后直接传空字符串调用
Account_ConfirmPasswordEmail毫无意义,该接口需传入邮箱收到的验证码,应在用户获取验证码后再调用。
修正后的代码
public async Task SetTwoAutorize() { try { const string old_password = "你的当前密码"; // 账号已有密码时填写,首次设置留空或设为null const string new_password = "new_pass"; // 新2FA密码,设为null可禁用2FA const string target_email = "my_email"; // 要绑定的邮箱 var accountPwd = await _Client.Account_GetPassword(); // 生成旧密码Hash(仅账号已有密码时需执行) var oldPasswordHash = string.IsNullOrEmpty(old_password) ? null : await Client.InputCheckPassword(accountPwd, old_password); // 生成新密码Hash(使用原生new_algo,不篡改current_algo) var newPasswordHash = new_password == null ? null : await Client.InputCheckPassword(accountPwd, new_password); await _Client.Account_UpdatePasswordSettings(oldPasswordHash, new Account_PasswordInputSettings { email = target_email, flags = Account_PasswordInputSettings.Flags.has_email, new_password_hash = newPasswordHash?.A, new_algo = accountPwd.new_algo, }); // 提示用户查收邮箱验证码,获取后再调用确认接口 // string verificationCode = await GetUserInputVerificationCode(); // await _Client.Account_ConfirmPasswordEmail(verificationCode); } catch (Exception e) { // 打印错误信息方便排查 Console.WriteLine($"错误详情:{e.Message}"); } }
关键注意事项
- 首次设置2FA时,
old_password留空,oldPasswordHash设为null即可。 - 调用
Account_UpdatePasswordSettings成功后,Telegram会向目标邮箱发送验证码,必须调用Account_ConfirmPasswordEmail传入验证码才能完成邮箱绑定。 - 确保
InputCheckPassword方法对应正确算法:旧密码用current_algo,新密码用new_algo,不要手动修改对象属性。
内容的提问来源于stack exchange,提问作者xellan
相关产品推荐
相关产品推荐

