精华内容
下载资源
问答
  • 在文件上传到服务器的时候,我们希望能够获得文件的指纹以确定文件没有被篡改过。常用的算法最开始使用的是 MD5,随后随着技术的发展,MD5 算法已经被确定是不安全的了。目前可能使用更多的是 HSA3_256 哈希算法。...

    在文件上传到服务器的时候,我们希望能够获得文件的指纹以确定文件没有被篡改过。

    常用的算法最开始使用的是 MD5,随后随着技术的发展,MD5 算法已经被确定是不安全的了。

    目前可能使用更多的是 HSA3_256 哈希算法。

    哈希算法通常有以下几个特点:

    1. 正像快速:原始数据可以快速计算出哈希值
    2. 逆向困难:通过哈希值基本不可能推导出原始数据
    3. 输入敏感:原始数据只要有一点变动,得到的哈希值差别很大
    4. 冲突避免:很难找到不同的原始数据得到相同的哈希值

    哈希算法主要有MD4、MD5、SHA。

    1. MD4 1990年 输出128位 (已经不安全)
    2. MD5 1991年 输出128位 (已经不安全)
    3. SHA-0 1993年 输出160位 (发布之后很快就被NSA撤回,是SHA-1的前身)
    4. SHA-1 1995年 输出160位 (已经不安全)
    5. SHA-2包括SHA-224、SHA-256、SHA-384,和 SHA-512,分别输出224、256、384、512位。 (目前安全)

    在 Java 中,可以使用 Apache 提供的 Apache Commons Codec,非常容易的获得文件的哈希字符串指纹。

    方法也非常简单,第一步就是需要将文件读取为 InputStream。

    如果自己写的话,可能这一步有点代码。

    你可以使用 Apache 提供的

    FileUtils.openInputStream

    就可以直接将文件读取为 InputStream 了。

    考察下面的代码:

    InputStream is = FileUtils.openInputStream(new File(SCOConstants.PATH_DATA_EXCHANGE + "Estimated vs Original Manual (JIRA) 10-23-20.csv"));

    MD5 哈希

    024e75b44a016ceb4bc07041e27dace2.png


    600px-MD5_algorithm.svg600×659 18.4 KB

    在文件读取后,你只需要使用 Apache Commons Codec 提供的 DigestUtils 方法就可以了。

    /**
         * Test to get file's MD5 Hash
         *
         * @throws Exception
         */
        @Test
        public void fileMD5Test() throws Exception {
    
            String md5 = StringUtils.EMPTY;
    
            try {
                InputStream is = FileUtils.openInputStream(new File(SCOConstants.PATH_DATA_EXCHANGE + "Estimated vs Original Manual (JIRA) 10-23-20.csv"));
                md5 = DigestUtils.md5Hex(is);
            } catch (Exception e) {
                e.printStackTrace();
            }
            logger.debug("MD5 for File: {}", md5);
        }

    上面的代码就可以直接获得 InputStream 的 MD5 哈希。

    程序的输出为:

    09:32:31.522 [main] DEBUG c.i.s.c.t.utilities.CodecUtilsTest - MD5 for File: 1ec6473fc1bd50a982767f555734af64

    SHA3 256

    与 MD5 哈希算法是一致的。

    2f23d6168755bb9bb6f1c806a1a8158f.png


    Sha-3_11280×668 43 KB

    你需要首先也将文件读取为 InputStream ,然后使用 Apache 提供的 DigestUtils.sha3_256Hex(is); 就可以了。

    考察下面的代码:

    /**
         * Test to get file's SHA3_256Hex Hash
         *
         * @throws Exception
         */
        @Test
        public void fileSHA3_256HexTest() throws Exception {
    
            String sha3Hex256 = StringUtils.EMPTY;
    
            try {
                InputStream is = FileUtils.openInputStream(new File(SCOConstants.PATH_DATA_EXCHANGE + "Estimated vs Original Manual (JIRA) 10-23-20.csv"));
                sha3Hex256 = DigestUtils.sha3_256Hex(is);
            } catch (Exception e) {
                e.printStackTrace();
            }
            logger.debug("SHA3_256Hex for File: {}", sha3Hex256);
        }

    运行程序的输出为:

    09:35:48.093 [main] DEBUG c.i.s.c.t.utilities.CodecUtilsTest - SHA3_256Hex for File:

    https://www.ossez.com/t/java/615

    展开全文
  •  //从文件读到buffer,最多装满buffer if (numRead > 0) { complete.update(buffer, 0, numRead); //用读到的字节进行MD5的计算,第二个参数是偏移量 } } while (numRead != -1); fis.close(); return ...

    public static byte[] createChecksum(String filename) throws Exception {      InputStream fis =  new FileInputStream(filename);          //将流类型字符串转换为String类型字符串         byte[] buffer = new byte[1024];      MessageDigest complete = MessageDigest.getInstance("MD5"); //如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256      int numRead;         do {          numRead = fis.read(buffer);    //从文件读到buffer,最多装满buffer          if (numRead > 0) {          complete.update(buffer, 0, numRead);  //用读到的字节进行MD5的计算,第二个参数是偏移量          }      } while (numRead != -1);         fis.close();      return complete.digest();   }      public static String getMD5Checksum(String filename) throws Exception {      byte[] b = createChecksum(filename);      String result = "";         for (int i=0; i < b.length; i++) {          result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring(1);//加0x100是因为有的b[i]的十六进制只有1位      }      return result;   }

    展开全文
  • 怎样用java获取文件的hash

    千次阅读 2021-02-26 09:06:05
    //从文件读到buffer,最多装满buffer if (numRead > 0) { complete.update(buffer, 0, numRead); //用读到的字节进行MD5的计算,第二个参数是偏移量 } } while (numRead != -1); fis.close(); return complete....

    public static byte[] createChecksum(String filename) throws Exception {

    InputStream fis = new FileInputStream(filename); //将流类型字符串转换为String类型字符串

    byte[] buffer = new byte[1024];

    MessageDigest complete = MessageDigest.getInstance("MD5"); //如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256

    int numRead;

    do {

    numRead = fis.read(buffer); //从文件读到buffer,最多装满buffer

    if (numRead > 0) {

    complete.update(buffer, 0, numRead); //用读到的字节进行MD5的计算,第二个参数是偏移量

    }

    } while (numRead != -1);

    fis.close();

    return complete.digest();

    }

    public static String getMD5Checksum(String filename) throws Exception {

    byte[] b = createChecksum(filename);

    String result = "";

    for (int i=0; i < b.length; i++) {

    result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring(1);//加0x100是因为有的b[i]的十六进制只有1位

    }

    return result;

    }

    展开全文
  • 我编写了以下程序来计算Java中字符串的SHA-256哈希值:public class ToHash {public static void main(String[] args) {byte[] data = "test".getBytes("UTF8");MessageDigest digest = MessageDigest.getInstance(...

    我编写了以下程序来计算Java中字符串的SHA-256哈希值:

    public class ToHash {

    public static void main(String[] args) {

    byte[] data = "test".getBytes("UTF8");

    MessageDigest digest = MessageDigest.getInstance("SHA-256");

    byte[] hash = digest.digest(data);

    System.out.println(new BASE64Encoder().encode(hash));

    }

    }

    好吧,那很好。在下一步中,我想以一种接受文件并计算其哈希值的方式来开发它。我的解决方案是在字符串数组中读取整个文件,然后在该字符串数组上调用digest()方法。但是有两个问题:

    我不知道如何将整个文件读入数组?目前,我认为我必须逐行阅读并在数组中添加新行!

    上面的方法需要大文件存储空间!

    这是我当前的程序来读取文件:

    public class ToHash {

    public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException, FileNotFoundException, IOException {

    // TODO code application logic here

    // The name of the file to open.

    String fileName = "C:\\Users\\ghasemi\\Desktop\\1.png";

    BufferedReader br = null;

    try {

    String sCurrentLine;

    br = new BufferedReader(new FileReader(fileName));

    while ((sCurrentLine = br.readLine()) != null) {

    byte[] data = sCurrentLine.getBytes("UTF8");

    System.out.println(new BASE64Encoder().encode(data));

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    if (br != null) {

    br.close();

    }

    } catch (IOException ex) {

    ex.printStackTrace();

    }

    }

    }

    }

    似乎没有一种方法可以让BufferedReader对象一次调用即可读取整个文件。

    展开全文
  • 编程语言里的数据类型:java里的hashmap, python里的哈希表 - dict负载均衡:一致性哈希算法文件和程序的版本管理:通过哈希值来判断用户的密码:我的密码,网站有,会不会被偷?以上的场景,覆盖了:开发的编码,...
  • 为什么要有哈希?假设我们要设计一个系统来存储将员工手机号作为主键的员工记录,并希望高效地执行以下操作:插入电话号码和相应的信息。(插入)搜索电话号码并获取信息。(查找)删除电话号码及相关信息。(删除)我们...
  • 你好,我是彤哥。上一节,我们一起学习了...本节,我想跟着大家一起重新学习下关于哈希的一切——哈希哈希函数、哈希表。这三者有什么样的爱恨情仇?为什么Object类中需要有一个hashCode()方法?它跟equals()方法...
  • Java 计算文件hash

    2021-01-09 14:43:53
    import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.MessageDigest;... * 计算文件hash */ public static String hashFile(File file) throws Exc.
  • 通过指定的文件路径获取文件的32位哈希值
  • Java计算文件的hash

    2021-02-12 18:17:35
    当然是用比较文件hash的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同。比较常用的文件hash算法有MD5和SHA-1。我用的是MD5算法,java中,计算MD5可以用MessageDigest这个类。下面...
  • Java 获取字符串Hash

    千次阅读 2021-02-26 09:28:13
    Java 生成字符串的Hash:/*** A hashing method that changes a string (like a URL) into a hash suitable for using as a* disk filename.*/public static String hashKeyForDisk(String key) {String cacheKey;...
  • 上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中前端:要用到一个插件,点击下载企业用户后台管理系统 - 谭人才招聘系统function ajaxfile() {if ($("#image").val() !...
  • python 获取文件哈希Python's (pip's) requirements.txtfileis the equivalent topackage.jsonin the JavaScript / Node.js world. This requirements.txtfile isn't as pretty as package.jsonbut itnot only def.....
  • // CHash.cpp : implementation file//#include "stdafx.h"#include "CHash.h"#include CString CHash::SHA1Hash(CString strHashFile){USES_CONVERSION;FILE *fileToHash = NULL;unsigned long lenRead = 0;...
  • Java获取文件的md5的Hash

    万次阅读 2020-10-15 13:28:58
    需要使用标准的MD5,其实一行代码...JAVA自带的commons-codec包就提供了获取16进制MD5的方法。 其底层实现上,也是分多次将一个文件读入,所以性能上也不错。 DigestUtils.md5Hex(new FileInputStream(path)); ...
  • Java中的哈希键 - java

    2021-04-12 16:17:54
    Java中,当我使用字符串作为Hashmap的键时,与使用字符串哈希码作为HashMap的键时,得到的结果略有不同。有见识吗?参考方案当我使用字符串哈希码作为HashMap中的键时。您不得使用哈希码本身作为密钥。哈希码并...
  • using (HashAlgorithm hash = HashAlgorithm.Create()) { ...//哈希算法根据文本得到哈希码的字节数组 string hashValue = BitConverter.ToString(hashByte);//将字节数组装换为字符串 } }
  • 读取上传的文件,使用crypto-js进行SHA1、MD5、SHA256等算法的哈希计算。 1.创建通用工具类 handleFileUtils.js: ... 计算文件哈希 */ getFileHash(value){ let reader = new FileReader(); reader...
  • 【实例简介】此实例是java版本,C#版本在这里https://www.haolizi.net/example/view_16702.html【实例截图】...import java.io.FileInputStream;import java.math.BigInteger;import java.security.MessageDigest;pu...
  • Linux下计算文件哈希值和文件比较

    万次阅读 2015-09-10 19:44:33
    在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。  2、命令格式 md5sum [OPTION]... [FILE]...  3、命令...
  • 哈希值详解

    千次阅读 2019-11-27 22:33:41
    hashCode()是Object类的方法,所以说Java的对象都可以调用这个hashCode方法返回哈希值. 哈希值特点 如果自定义类没有重写hashCode方法,那么自定义类的对象生成的哈希值是根据对象的内存地址值生成的,所以说即便两...
  • 首先打开文件获取文件输入流,然后获取文件的大小,最后读取文件输入流并按固定长度进行分割为多份单独存储。 Tracer服务器负责记录在线的节点,这些节点为下载终端提供自己缓存的分块文件文件下载并不占用...
  • 在将其送入Digest对象以生成哈希值之后.具体来说,首先将数据转换为字节数组,然后将其提供给摘要,然后将输出哈希转换为十六进制流.为什么所有这些字节和十六进制转换?PS:我想答案与Java和Digest对象如何开展业务...
  • 小编典典我的解释可能无法解决您的问题,因为它很大程度上取决于您的实际运行时环境,但是当我在系统上运行您的代码时,吞吐量受磁盘I /O限制,而不是哈希计算。通过切换到NIO并不能解决问题,而仅仅是由于您以很小...
  • 【转】Java计算文件的hash

    千次阅读 2018-01-25 12:09:00
    当然是用比较文件hash的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同。比较常用的文件hash算法有MD5和SHA-1。我用的是MD5算法,java中,计算MD5可以用MessageDigest这个类。...
  • 生成文件的Hash码MD5

    2014-11-04 18:42:05
    Java程序。可以生成文件的MD5哈希值。生成的Hash值可保存到txt文件中。程序完全可运行。
  • 哪位大牛知道php的 hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] ),在java中有对应的函数吗

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,626
精华内容 24,250
关键字:

java获取文件哈希值

java 订阅