提问人:Altohombre 提问时间:1/12/2023 最后编辑:Altohombre 更新时间:1/13/2023 访问量:90
在 Kotlin 中为密码“0123”使用前导零是否有解决方法?
Is there a work around for using a leading zero for a password "0123" in Kotlin?
问:
这个密码已经使用了很多年,所以我不能在没有员工愤怒的情况下更改它。原始代码是用 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
}
答:
1赞
Joffrey
1/12/2023
#1
首先,您应该认真考虑不要像这样对密码进行硬编码。这是非常不安全的。现在,您的问题可能与密码以外的其他内容有关,因此对于这些情况,请提前阅读。
如果没有双引号,则用于设置变量的值是一个数字,而不是字符串(文本)。因此,从本质上讲,您(试图)将数字 123(一百二十三)定义为密码。但很可能你不关心这里的数值 123,你想要 4 个字符 .password
0123
如果你想要比较文本,请使用这样的双引号(然后你就不需要比较了)。private val password = "0123"
.toString()
现在至于为什么你会得到这个奇怪的错误。如果您尝试使用带有前导 0 的数字文字,就会出现您面临的错误,就像在 Kotlin 中一样。这是因为 Kotlin 认为您正在尝试使用 Java 的八进制前缀解释,并且正在防止潜在的错误。在 Java 中,前面带有 0 的数字文字以八进制(以 8 为基数的数字系统)读取。因此,该值(作为数字文字)实际上是十进制的。0123
0123
83
Kotlin 不支持八进制前缀,但这绝对不是您想要的。
评论
1赞
ggorlen
1/12/2023
值得一提的是,源代码中嵌入的纯文本字符串并不安全,将用户的密码输入保存在字符串中也不安全,因此在这些更改之后,身份验证系统仍然完全不安全。
评论