尝试通过小型编码测试打开开发者选项
Trying to open developer options with small coding test
我正在尝试打开名为 Scelight 的程序的开发人员模式。该程序在让您进入之前进行了一些测试。
问题如下:
Create a .txt file (saved in a specific location) having the hexadecimal representation of the SHA-256 checksum of the decimal representation of the max value of an 8-byte signed integer shifted right by a value of 0x1a and XOR-ed with the hex value CafeBabe.
我的代码是:
long a = 9223372036854775807L;
a = a >> 0x1a;
long hex2 = 0xcafebabe;
long out4 = a ^ hex2;
更新:
为此代码使用 Eclipse 和 Java。建议开发者使用。
开发人员确认 0xcafebabe
是应该使用的。在 Eclipse 中,尽管 0xCafeBabe
将给出与 0xcafebabe
.
相同的结果
结果是 -136549677759
,然后我将其放入 .txt 文件并保存。不幸的是,这是不正确的,因为开发者选项不可用。
a0946923280760e172171605e3c85d096ffa39dfbc308161b05b93e77120e453
这是 -136549677759
的结果,它不起作用。我相信我们正在寻找最终结果的校验和。
披露:我是 Scelight.
的作者
事前说明:问题陈述不要求你使用Java,任何编程语言都可以。
Java
中的解决方案
having the hexadecimal representation of the SHA-256 checksum of...
我们需要计算一些东西的SHA-256校验和,并且校验和必须使用十六进制数来表示。十六进制表示中的大小写(小写或大写字母)无关紧要。
the max value of an 8-byte signed integer
这是Long.MAX_VALUE = (1L<<63)-1 = 9223372036854775807L
。
long a = Long.MAX_VALUE;
shifted right by a value of 0x1a
a >>= 0x1a;
and XOR-ed with the hex value CafeBabe.
您需要使用 long
类型的值 0xcafebabe
。但请注意,如果您使用值 0xcafebabe
,那是一个 int
类型的常量,如果您将其转换为 long
,则符号位将用于扩展它:
System.out.printf("%x", (long)0xcafebabe); // Prints ffffffffcafebabe
所以使用 long
常量:
a ^= 0xcafebabeL;
目前的结果:
a = 134033261889
...having the hexadecimal representation of the SHA-256 checksum of the decimal representation of...
SHA-256 校验和(省略异常处理!):
byte[] result = MessageDigest.getInstance("SHA-256").digest((""+a).getBytes());
关于String.getBytes()
的注释:是的,它returns字符串的字节使用平台的默认字符集。但是由于字符串只包含数字(可选负号,但在我们的例子中它是正号),所以没问题。在关键任务应用程序中,应指定编码,如下所示:(""+a).getBytes(StandardCharsets.UTF_8)
.
以及十六进制表示:
for (byte b : result) {
System.out.printf("%02x",b);
}
注意"%02x"
格式字符串,一个字节的十六进制表示必须是2个十六进制数字,如果等于或小于0xf
首先是0
。
输出的前 8 个字符(修剪,如果你想要完整输出至少 运行 代码):
e0dd2851...
完整的运行可用代码:
public static void main(String[] args) throws Exception {
long a = Long.MAX_VALUE;
a >>= 0x1a;
a ^= 0xcafebabeL;
byte[] result = MessageDigest.getInstance("SHA-256").digest(("" + a).getBytes());
for (byte b : result) {
System.out.printf("%02x", b);
}
}
在"compact"模式下的完整运行可用代码:
for (byte b : MessageDigest.getInstance("SHA-256")
.digest(Long.toString((Long.MAX_VALUE >> 0x1a ^ 0xcafebabeL)).getBytes()))
System.out.printf("%02x", b);
Go 中的解决方案
Go 中的解决方案更短:
a := int64(math.MaxInt64)
a >>= 0x1a
a ^= 0xcafebabe
fmt.Printf("%x", sha256.Sum256([]byte(fmt.Sprint(a))))
和 "compact" 一行:
fmt.Printf("%x", sha256.Sum256([]byte(fmt.Sprint(int64(1<<63-1)>>0x1a^0xcafebabe))))
可以在 Go Playground.
上尝试 Go 解决方案
我正在尝试打开名为 Scelight 的程序的开发人员模式。该程序在让您进入之前进行了一些测试。
问题如下:
Create a .txt file (saved in a specific location) having the hexadecimal representation of the SHA-256 checksum of the decimal representation of the max value of an 8-byte signed integer shifted right by a value of 0x1a and XOR-ed with the hex value CafeBabe.
我的代码是:
long a = 9223372036854775807L;
a = a >> 0x1a;
long hex2 = 0xcafebabe;
long out4 = a ^ hex2;
更新:
为此代码使用 Eclipse 和 Java。建议开发者使用。
开发人员确认 0xcafebabe
是应该使用的。在 Eclipse 中,尽管 0xCafeBabe
将给出与 0xcafebabe
.
结果是 -136549677759
,然后我将其放入 .txt 文件并保存。不幸的是,这是不正确的,因为开发者选项不可用。
a0946923280760e172171605e3c85d096ffa39dfbc308161b05b93e77120e453
这是 -136549677759
的结果,它不起作用。我相信我们正在寻找最终结果的校验和。
披露:我是 Scelight.
的作者事前说明:问题陈述不要求你使用Java,任何编程语言都可以。
Java
中的解决方案having the hexadecimal representation of the SHA-256 checksum of...
我们需要计算一些东西的SHA-256校验和,并且校验和必须使用十六进制数来表示。十六进制表示中的大小写(小写或大写字母)无关紧要。
the max value of an 8-byte signed integer
这是Long.MAX_VALUE = (1L<<63)-1 = 9223372036854775807L
。
long a = Long.MAX_VALUE;
shifted right by a value of 0x1a
a >>= 0x1a;
and XOR-ed with the hex value CafeBabe.
您需要使用 long
类型的值 0xcafebabe
。但请注意,如果您使用值 0xcafebabe
,那是一个 int
类型的常量,如果您将其转换为 long
,则符号位将用于扩展它:
System.out.printf("%x", (long)0xcafebabe); // Prints ffffffffcafebabe
所以使用 long
常量:
a ^= 0xcafebabeL;
目前的结果:
a = 134033261889
...having the hexadecimal representation of the SHA-256 checksum of the decimal representation of...
SHA-256 校验和(省略异常处理!):
byte[] result = MessageDigest.getInstance("SHA-256").digest((""+a).getBytes());
关于String.getBytes()
的注释:是的,它returns字符串的字节使用平台的默认字符集。但是由于字符串只包含数字(可选负号,但在我们的例子中它是正号),所以没问题。在关键任务应用程序中,应指定编码,如下所示:(""+a).getBytes(StandardCharsets.UTF_8)
.
以及十六进制表示:
for (byte b : result) {
System.out.printf("%02x",b);
}
注意"%02x"
格式字符串,一个字节的十六进制表示必须是2个十六进制数字,如果等于或小于0xf
首先是0
。
输出的前 8 个字符(修剪,如果你想要完整输出至少 运行 代码):
e0dd2851...
完整的运行可用代码:
public static void main(String[] args) throws Exception {
long a = Long.MAX_VALUE;
a >>= 0x1a;
a ^= 0xcafebabeL;
byte[] result = MessageDigest.getInstance("SHA-256").digest(("" + a).getBytes());
for (byte b : result) {
System.out.printf("%02x", b);
}
}
在"compact"模式下的完整运行可用代码:
for (byte b : MessageDigest.getInstance("SHA-256")
.digest(Long.toString((Long.MAX_VALUE >> 0x1a ^ 0xcafebabeL)).getBytes()))
System.out.printf("%02x", b);
Go 中的解决方案
Go 中的解决方案更短:
a := int64(math.MaxInt64)
a >>= 0x1a
a ^= 0xcafebabe
fmt.Printf("%x", sha256.Sum256([]byte(fmt.Sprint(a))))
和 "compact" 一行:
fmt.Printf("%x", sha256.Sum256([]byte(fmt.Sprint(int64(1<<63-1)>>0x1a^0xcafebabe))))
可以在 Go Playground.
上尝试 Go 解决方案