“123456”,使用utf8编码进行base64,结果的utf8编码再进行md5,结果是什么

时间:2023-01-10 15:13:30
“123456”,使用utf8编码进行base64,结果的utf8编码再进行md5
怎么能编码出“87D9BB400C0634691F0E3BAAF1E2FD0D”这个结果?

5 个解决方案

#1


能从这么字符串反推回去,那加密不就没有意义了?

#2


import java.security.MessageDigest;

import sun.misc.BASE64Encoder;

public class Md5 {
public String str;

public void md5s(String plainText) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();

int i;

StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
str = buf.toString();
System.out.println(buf.length() + " result: " + buf.toString());// 32位的加密
System.out.println("result: " + buf.toString().substring(8, 24));// 16位的加密
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}

public static void main(String agrs[]) throws Exception {
final String s = "123456";
String s1 = java.net.URLEncoder.encode(s, "utf-8");
BASE64Encoder b = new BASE64Encoder();
String s2 = b.encode(s1.getBytes());
// System.out.println(s2);
Md5 m = new Md5();
m.md5s(s2);
}

}

其实不用utf-8转换
结果一样
打出来的32位就是,不过都是小写

#3


有什么问题吗?

#4


引用 1 楼 tosshl 的回复:
能从这么字符串反推回去,那加密不就没有意义了?

不是要反推,认真看题啊

#5


谢谢yaoweijq
我就一直玩不明白这些encode操作

#1


能从这么字符串反推回去,那加密不就没有意义了?

#2


import java.security.MessageDigest;

import sun.misc.BASE64Encoder;

public class Md5 {
public String str;

public void md5s(String plainText) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();

int i;

StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
str = buf.toString();
System.out.println(buf.length() + " result: " + buf.toString());// 32位的加密
System.out.println("result: " + buf.toString().substring(8, 24));// 16位的加密
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}

public static void main(String agrs[]) throws Exception {
final String s = "123456";
String s1 = java.net.URLEncoder.encode(s, "utf-8");
BASE64Encoder b = new BASE64Encoder();
String s2 = b.encode(s1.getBytes());
// System.out.println(s2);
Md5 m = new Md5();
m.md5s(s2);
}

}

其实不用utf-8转换
结果一样
打出来的32位就是,不过都是小写

#3


有什么问题吗?

#4


引用 1 楼 tosshl 的回复:
能从这么字符串反推回去,那加密不就没有意义了?

不是要反推,认真看题啊

#5


谢谢yaoweijq
我就一直玩不明白这些encode操作