在 Kotlin 中为密码“0123”使用前导零是否有解决方法?

Is there a work around for using a leading zero for a password "0123" in Kotlin?

提问人:Altohombre 提问时间:1/12/2023 最后编辑:Altohombre 更新时间:1/13/2023 访问量:90

问:

这个密码已经使用了很多年,所以我不能在没有员工愤怒的情况下更改它。原始代码是用 Java 完成的,它允许前导零。有什么方法仍然可以在 Kotlin 中使用密码“0123”吗?我将密码保存为变量。

尝试了 0123,它给出了错误:不支持 [文字前缀和后缀] & 属性 Setter 和 Getter 预期。

我希望它能工作,因为它可以在前面没有 0 的情况下工作。

用法:

private var password = 0123
private var passcode: EditText? = null

if (passcode?.text.toString() == password.toString()) {
// do something
}else {
// do something else
}
Android Kotlin 变量 前导零

评论

1赞 Tenfour04 1/12/2023
密码有什么用?完全不清楚你在说什么。
0赞 ggorlen 1/12/2023
密码是什么类型?字符串可以有前导 0,但最好将密码存储在字符串中。无论如何,听起来您的密码处理代码非常不安全,因此您可能遇到比前导零更大的问题。
0赞 Altohombre 1/12/2023
编辑文本。用户输入 0123 并验证。
1赞 Tenfour04 1/12/2023
我们需要查看示例代码,以了解您正在尝试执行的操作以及您做错了什么。例如,显示您正在运行的 Java 代码和无法正常工作的 Kotlin 版本。
3赞 Joffrey 1/12/2023
为什么要将密码定义为数字而不是字符串?

答:

1赞 Joffrey 1/12/2023 #1

首先,您应该认真考虑不要像这样对密码进行硬编码。这是非常不安全的。现在,您的问题可能与密码以外的其他内容有关,因此对于这些情况,请提前阅读。

如果没有双引号,则用于设置变量的值是一个数字,而不是字符串(文本)。因此,从本质上讲,您(试图)将数字 123(一百二十三)定义为密码。但很可能你不关心这里的数值 123,你想要 4 个字符 .password0123

如果你想要比较文本,请使用这样的双引号(然后你就不需要比较了)。private val password = "0123".toString()

现在至于为什么你会得到这个奇怪的错误。如果您尝试使用带有前导 0 的数字文字,就会出现您面临的错误,就像在 Kotlin 中一样。这是因为 Kotlin 认为您正在尝试使用 Java 的八进制前缀解释,并且正在防止潜在的错误。在 Java 中,前面带有 0 的数字文字以八进制(以 8 为基数的数字系统)读取。因此,该值(作为数字文字)实际上是十进制的。0123012383

Kotlin 不支持八进制前缀,但这绝对不是您想要的。

评论

1赞 ggorlen 1/12/2023
值得一提的是,源代码中嵌入的纯文本字符串并不安全,将用户的密码输入保存在字符串中也不安全,因此在这些更改之后,身份验证系统仍然完全不安全。