我有一个字节数组填充十六进制数字和打印它简单的方法是非常没有意义的,因为有许多不可打印的元素.我需要的是以下形式的确切十六进制代码:3a5f771c
我正在寻找一种方法来转换长字符串(从转储),它表示十六进制值到一个字节数组.
但为了保持原创,我会用自己的方式来表达它:假设我有一个"00A0BF"
我想要解释为的字符串
byte[] {0x00,0xA0,0xBf}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我是Java新手,最后使用BigInteger
并注意领先的十六进制零.但我觉得它很难看,我确信我错过了一些简单的东西.
我正在尝试用Java创建一个简单的String to SHA1转换器,这就是我所拥有的......
public static String toSHA1(byte[] convertme) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-1");
}
catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}
return new String(md.digest(convertme));
}
Run Code Online (Sandbox Code Playgroud)
当我通过它时toSHA1("password".getBytes())
,我[?a?????%l?3~??.
知道它可能是一个简单的编码修复,如UTF-8,但有人可以告诉我应该做什么来获得我想要的东西是5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
什么?或者我这样做完全错了?
我将Java 8中的maven项目迁移到Java 9项目而没有任何构建工具Eclipse OxyGen 1a
.
所以我的module-info.java看起来像这样:
但java.xml.bind不可访问,虽然它在我的模块路径中:
那么这里有什么问题?
我想知道这里记录的解决方案是否仍然是解决方案还是有其他方式从4个字节获取一个int?
谢谢.
编辑:我从套接字.read获取byte []
编辑:int recvMsgSize = in.read(Data, 0, BufferSize);
如果recvMsgSize为-1我知道连接已被删除.
我在使用DataInputStream而不是InputStream时如何检测到这一点?
谢谢.
编辑:对于接受正确答案的yoyo道歉.但是在mihi更新了最终响应之后,看起来该方法是可靠的并且减少了扩展编码,并且在我看来是最佳实践.
我正在将一些Java代码移植到PHP代码中.在Java中,我有一个哈希SHA256代码,如下所示:
public static String hashSHA256(String input)
throws NoSuchAlgorithmException {
MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
byte[] shaByteArr = mDigest.digest(input.getBytes(Charset.forName("UTF-8")));
StringBuilder hexStrBuilder = new StringBuilder();
for (int i = 0; i < shaByteArr.length; i++) {
hexStrBuilder.append(Integer.toHexString(0xFF & shaByteArr[i]));
}
return hexStrBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)
在PHP中,我哈希如下:
$hash = hash("sha256", utf8_encode($input));
Run Code Online (Sandbox Code Playgroud)
我用input ="test"运行示例代码.但是,我得到了2个不同的哈希字符串:
Java: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2bb822cd15d6c15b0f0a8
PHP: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么以及如何让它们相互匹配?请注意,我无法修改Java实现代码,只能修改PHP.
万分感激!
我正在尝试将同一文件的 SHA-256 哈希值与 Python 和 Java 进行比较。但是,在某些情况下,Python 哈希值具有前导零,而 Java 版本则没有。例如,在两个程序中散列somefile.txt 会产生:
Python: 000c3720cf1066fcde30876f498f060b0b3ad4e21abd473588f1f31f10fdd890
爪哇: c3720cf1066fcde30876f498f060b0b3ad4e21abd473588f1f31f10fdd890
简单地删除前导 0 并进行比较是否安全,或者是否有不产生前导零的实现?
Python代码
def sha256sum(filename):
h = hashlib.sha256()
b = bytearray(128*1024)
mv = memoryview(b)
with open(filename, 'rb', buffering=0) as f:
for n in iter(lambda : f.readinto(mv), 0):
h.update(mv[:n])
return h.hexdigest()
print(sha256sum('/somepath/somefile.txt'))
# 000c3720cf1066fcde30876f498f060b0b3ad4e21abd473588f1f31f10fdd890
Run Code Online (Sandbox Code Playgroud)
Java代码
public static String calculateSHA256(File updateFile) {
MessageDigest digest;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "Exception while getting digest", e);
return null;
}
InputStream …
Run Code Online (Sandbox Code Playgroud) 如何在java中以字节数据类型存储大于127的值.
int b = 160;
System.out.println((byte)b);
Run Code Online (Sandbox Code Playgroud)
它打印-96.
注意:我想在BLE设备上写字节.所以无法将其转换为short或int.