通过MD5转换实现文件名得简单加密

23 篇文章 0 订阅

往往有这种需求:不想让别人清晰的看见把从网上down下来的资源名字和类型。

可以先把down下来的资源名字通过MD5转换下在保存到本地。

 

MessageDigestMD5

MessageDigest 类的用法

MessageDigest

 

MD5 是 消息摘要算法,就像 hashCode 一样,在计算的过程中会丢弃很多的原始数据,MD5 是无法还原为原文的,就像字符串的 hashCode 并不能还原为字符串一样。

如果密文长度是固定的加密算法,基本上都可以认定为是消息摘要算法,是不能还原原文的。消息摘要一般只是用于 验证原文的有效性看看是否被撰改过
 
一般使用MD5进行检验时, 往往是将传来的明文数据再次MD5加密,然后和存储在数据库中的MD5内容进行比对,以进行正确性判断。
 
MD5 其实不是加密, 是HASH. HASH 原理就是产生 1对1不可逆的。
 
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public final class MD5Util {

	private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5',
			'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

	public static String md5(String s) {
		
		try {
			// 使用MD5创建MessageDigest对象
			MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
			
			digest.update(s.getBytes());
			
			byte messageDigest[] = digest.digest();

			return toHexString(messageDigest);
			
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return s;
	}

	private static String toHexString(byte[] b) {
		
		StringBuilder sb = new StringBuilder(b.length * 2);
		
		for (int i = 0; i < b.length; i++) {
			
			sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
			sb.append(HEX_DIGITS[b[i] & 0x0f]);			
		}
		
		return sb.toString();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要使用Java提供的MessageDigest类来实现MD5加密。以下是示例代码: ```java import java.io.*; import java.security.*; public class MD5Demo { public static void main(String[] args) throws Exception { File file = new File("test.txt"); FileInputStream fis = new FileInputStream(file); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) != -1) { md.update(buffer, 0, length); } byte[] digest = md.digest(); String result = toHex(digest); System.out.println(result); } private static String toHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b & 0xff)); } return sb.toString(); } } ``` 接下来,你需要使用Java提供的ZipOutputStream类来实现压缩为zip。以下是示例代码: ```java import java.io.*; import java.security.*; import java.util.zip.*; public class ZipDemo { public static void main(String[] args) throws Exception { File file = new File("test.txt"); FileInputStream fis = new FileInputStream(file); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) != -1) { md.update(buffer, 0, length); } byte[] digest = md.digest(); String md5 = toHex(digest); FileOutputStream fos = new FileOutputStream(md5 + ".zip"); ZipOutputStream zos = new ZipOutputStream(fos); ZipEntry entry = new ZipEntry(file.getName()); zos.putNextEntry(entry); fis = new FileInputStream(file); while ((length = fis.read(buffer)) != -1) { zos.write(buffer, 0, length); } zos.closeEntry(); zos.close(); fis.close(); fos.close(); } private static String toHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b & 0xff)); } return sb.toString(); } } ``` 这段代码将test.txt文件压缩为MD5值为文件名的zip文件。你可以根据需要修改文件名文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值