gpt4 book ai didi

java - 消化 md5 抛出 UTF8 错误 - Java

转载 作者:行者123 更新时间:2023-12-01 15:13:03 25 4
gpt4 key购买 nike

我正在消化其他一些 zip 文件的内容以生成 MD5。文件内容被摘要并生成 MD5,而不是例如基于时间戳生成 MD5。因此,我断言两个文件具有相同的内容,即使它们是在不同时间生成的。因此,我编写了以下 Java 方法:

    public String digest( ZipInputStream entry ) throws IOException{

byte[] digest = null;
MessageDigest md5 = null;
String mdEnc = "";
try {
md5 = MessageDigest.getInstance( "MD5" );

ZipEntry current;
if( entry != null ) {
while(( current = entry.getNextEntry() ) != null ) {
if( current.isDirectory() ) {
digest = this.encodeUTF8( current.getName() );
md5.update( digest );
}
else{
int size = ( int )current.getSize();
if(size > 0){
digest = new byte[ size ];
entry.read( digest, 0, size );
md5.update( digest );
}
}
}
digest = md5.digest();
mdEnc = new BigInteger( 1, md5.digest() ).toString( 16 );
entry.close();
}
}
catch ( NoSuchAlgorithmException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mdEnc;
}

public byte[] encodeUTF8( String name ) {
final Charset UTF8_CHARSET = Charset.forName( "UTF-8" );
return name.getBytes( UTF8_CHARSET );
}

该方法工作正常,直到我得到了具有中文韩语日语编码的zip文件(不仅仅是传统的UTF-8):

Processing :mrl_l10n.zip
MD5 A: d41d8cd98f00b204e9800998ecf8427e
MD5 B: d41d8cd98f00b204e9800998ecf8427e
They Match
Processing :fcm.zip
MD5 A: d41d8cd98f00b204e9800998ecf8427e
MD5 B: d41d8cd98f00b204e9800998ecf8427e
They Match
Processing :1_mrm_root.zip
Exception in thread "main" java.lang.IllegalArgumentException
at java.util.zip.ZipInputStream.getUTF8String(Unknown Source)
at java.util.zip.ZipInputStream.getFileName(Unknown Source)
at java.util.zip.ZipInputStream.readLOC(Unknown Source)
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
at Tczip.digest(Tczip.java:98)
at Tczip.execute(Tczip.java:33)

有人知道如何为此创建解决方法吗?

最佳答案

使用 Java 7,它有一个新的 API - new ZipInputStream(InputStream, Charset),允许您设置条目名称的字符集。

关于java - 消化 md5 抛出 UTF8 错误 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12038321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com