winrt获取文件MD5码

//小文件
public static string ComputeMD5(byte[] bytes)
        {
            var alg = HashAlgorithmProvider.OpenAlgorithm("MD5");
            IBuffer buff = CryptographicBuffer.CreateFromByteArray(bytes);
            var hashed = alg.HashData(buff);
            var res = CryptographicBuffer.EncodeToHexString(hashed);
            return res;
        }
        public static byte[] StreamToBytes(Stream stream)
        {
            byte[] bytes = new byte[stream.Length];//这个地方会报内存不够,文件太大了
            stream.Read(bytes, 0, bytes.Length);
            return bytes;
        }
//大文件的话必须用数据流,不然会内存不够,一般大于50M的最好用流的形式比较好
        public static async Task<string> ComputeMD5(Stream stream)
        {
            var alg = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5);
            var inputStream = stream.AsInputStream();
            const uint capacity = 1000000000;//100M这个参数可以自己修改,根据自己的配置决定
            var buffer = new Windows.Storage.Streams.Buffer(capacity);
            var hash = alg.CreateHash();

            while (true)
            {
                await inputStream.ReadAsync(buffer, capacity, InputStreamOptions.None);
                if (buffer.Length > 0)
                    hash.Append(buffer);
                else
                    break;
            }
            string hashText = CryptographicBuffer.EncodeToHexString(hash.GetValueAndReset()).ToLower();

            return hashText;
        }

使用例子:StorageFile MYFile = await KnownFolders.DocumentsLibrary.GetFileAsync("791d5b3b142c6ba114eecc12ac2ff751.mp4");            Stream mystream = (await MYFile.OpenAsync(FileAccessMode.Read)).AsStream();            string txt2 = ComputeMD5(StreamToBytes(mystream));//使用正常获取,可能报错            string txt = await ComputeMD5(mystream);//使用流方式获取
时间: 2024-08-09 02:02:20

winrt获取文件MD5码的相关文章

QT 获取文件MD5值

[cpp] view plain copy /* 方法1 */ QFile theFile(fileNamePath); theFile.open(QIODevice::ReadOnly); QByteArray ba = QCryptographicHash::hash(theFile.readAll(), QCryptographicHash::Md5); theFile.close(); qDebug() << ba.toHex().constData(); [cpp] view pla

js获取文件md5库

在做文件系统时,上传下载需要获取到文件的md5. 上传获取文件md5优点:将文件md5传至后段服务器,若服务器已存在该文件,则将该文件关联,实现'秒传'的功能. 下载获取文件md5优点:下载文件完成后将文件md5传给后端,后端判断文件下载是否完整. ##js-spark-md5类库实现快速获取文件md5 demo如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF

Java 获取 文件md5校验码

讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件. 当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url, 将用户请求挂接到此url上并仿造一个虚假的断点续传请求,从若干url上将一个正常文件拼接出来. 查了下资料,java也可以实现文件md5校验码获取,代码如下: import java.io.File;import java.io.FileInputStream;import java.io.IOException;import jav

C# 获取文件MD5与SHA1

第一个方法直接使用 FileInfo 类构造函数传入路径就可以了,因为是做控制台可以直接拖拽文件,这一点还是很方便的. 需要注意的是路径中有空格会报错. 该方法中 s 代表传入的文件路径  1 static void GetFile(string s) 2         { 3             try 4             { 5                 FileInfo fi = new FileInfo(s); 6                 Console.Wr

C# 获取文件MD5校验码

using System; using System.IO; using System.Security.Cryptography; using System.Text; public class MD5Code { /// <summary> /// Get 文件的MD5校验码 /// </summary> /// <param name="fileName">文件名称</param> /// <returns></r

JAVA中获取文件MD5值的方法

1 DigestUtils.md5Hex(new FileInputStream(path)); 如果你只需要使用标准的MD5,其实一行代码就够了,JAVA自带的commons-codec包就提供了获取16进制MD5值的方法.其底层实现上,也是分多次将一个文件读入,类似方法三.所以性能上也不错. 总结:其实方法都是类似的,推荐使用这个方法,简洁且性能不错,当然,如果要做一些调整什么的,可以根据自己的需求进行方法的选择. PS:其实还有一个重点,就是如何知道自己生成的MD5值是否正确呢? 方法很多

Windows命令查看文件MD5码

D:\>certutil -hashfile md5test.txt MD5 MD5 哈希(文件 md5test.txt): d6 f6 bb 38 b5 6b 67 8f 34 9b e4 d6 2f 52 73 1f CertUtil: -hashfile 命令成功完成. D:\>certutil -hashfile md5test.txt SHA1 SHA1 哈希(文件 md5test.txt): fc 58 8e 1f 62 8e fb 19 1d 74 c8 c2 06 6a 12

C# 获取文件MD5、SHA1的值

/// <summary> /// 文件校验 /// </summary> public class FileCheck { /// <summary> /// 计算文件的 MD5 值 /// </summary> /// <param name="fileName">要计算 MD5 值的文件名和路径</param> /// <returns>MD5 值16进制字符串</returns> p

python 获取文件md5

def GetFileMd5(filename): if not os.path.isfile(filename): return myhash = hashlib.md5() f = file(filename,'rb') while True: b = f.read(8096) if not b : break myhash.update(b) f.close() return myhash.hexdigest()