将C++ md5 编码转换为 android/java
Convert C++ md5 encode to android/java
我想将以下方法转换为java。我不想自己实现它。但我没有得到预期的编码字符串。这是代码:
QString CHMacMD5::MD5_encode(QString password) {
unsigned char result[16];
memset( result, 0, sizeof(result) );
QString md5key = "some_key";
CHMacMD5 md5;
md5.HMac_MD5(password.toUtf8().constData(),password.length(),md5key.toUtf8().constData(),md5key.length(),result);
QString md5out;
for( int i = 0; i < 16; ++i ) {
md5out += QString("%1").arg(result[i], 2, 16, QChar('0'));
}
return md5out;
}
我想在 java 字符串转换为 UTF-8、无符号字节等之间发生了一些事情。
这是我的java代码:
private void md5Encode(String password) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return;
}
md.update(javaStringToNullTerminatedString(password));
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
System.out.println("original:" + password);
System.out.println("digested(hex):" + sb.toString());
}
private byte[] javaStringToNullTerminatedString(String string) {
CharsetEncoder enc = Charset.forName("ISO-8859-1").newEncoder();
int len = string.length();
byte b[] = new byte[len + 1];
ByteBuffer bbuf = ByteBuffer.wrap(b);
enc.encode(CharBuffer.wrap(string), bbuf, true);
b[len] = 0;
return b;
}
原始代码不是计算普通的 MD5 校验和,而是使用变量 md5key 中的密钥和输入密码的消息身份验证代码。
您的代码只计算密码的 md5 哈希,根本不使用密钥。
获取 hmac 的 MD5 输入的密钥和输入文本的组合由 RFC 2104 指定:https://www.ietf.org/rfc/rfc2104.txt
这里(第二个答案)似乎是如何在 Java 中做到这一点:如何在安卓中生成HMAC MD5?
相关文章:
- Android Java USB for native cpp
- Android NDK:用于第三方Java库的静态或共享C++运行时
- Android:使用 c++ 中的 byte[] 参数调用 java 方法
- 如何使用Java Native Interface在C++中导入python库-Android Studio
- 使用 C++ 和 Java 进行 Android 开发(使用不使用其中之一)
- Android 无法从本机代码调用 Java 方法 JNI
- Android OpenGLES Rendering using C++ and Java
- Android Studio 3.1.2 - 无法运行C++子例程"No implementation found for Java.lang.String..."
- 是否可以在SO库中公开C API以访问Android JAVA方法
- 无法将Android WebView渲染到C 和Java代码之间共享的外部纹理中
- 直接在Android NDK端使用tensorflow(不使用JAVA api)
- 如何将PNG从Java类中传递给Android中的本机类
- Android Java 服务方法始终向 Qt Android 服务返回相同的值
- 字符串在从Android Java调用ndk c ++函数后会得到一个奇怪的形式
- 在Android Java应用程序中使用OpenCV Mat.OpenCV Mat出现NoClassDefFound错误
- 从Android Java读取二进制错误UE4-C++
- 加密:使用 Linux/gcrypt 签名,使用 Android/Java 验证
- 将C++ md5 编码转换为 android/java
- 从Android Java调用本机函数 - JNI的替代品
- 将opengl纹理句柄从Android Java传递到c++