http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 5188|回复: 1
打印 上一主题 下一主题

[C#语言基础] C#和java分别对传输的文件对象进行MD5加密的算法

[复制链接]
跳转到指定楼层
楼主
发表于 2016-9-26 08:56:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在做文件上传的过程中,有时需要我们将文件流加密保存一份存到数据库中,因为同样的文件流加密后的值是一定的,所以在上传的过程中可以通过先加密该文件流得到一个加密值,然后拿到这个加密值到数据库查找一下,如果存在,就不需要进行上传操作了,直接在数据库插入一条该文件的记录,将路径指向存在的路径即可。下面代码是通过MD5加密文件流对象C#代码:
[C#] 纯文本查看 复制代码
string hashMd5Vaules = string.Empty;
                    try
                    {
                        Stream stream = file.InputStream;
                        byte[] bytes = new byte[stream.Length];
                        stream.Read(bytes, 0, bytes.Length);
                        SHA1 sha1 = SHA1.Create();
                        var md5 = new MD5CryptoServiceProvider();
                        byte[] hashBytes = md5.ComputeHash(bytes);

                        for (int i = 0; i < hashBytes.Length; i++)
                        {
                            hashMd5Vaules += string.Format("{0:X}", hashBytes[i]);
                        }

                        hashMd5Vaules = hashMd5Vaules.ToLower().Substring(8, 16);//从索引8开始,取16位
                    }
                    catch { }

java语法:
[Java] 纯文本查看 复制代码
/***
         * 把文件转化为字节数组
         * 
         * @param i
         * @return
         */
        public byte[] file2byte(int i) {
                byte[] buffer = null;
                try {
                        FileInputStream fis = new FileInputStream(verifyUtils.getModificationFile(new File(IMGPathList.get(i))));
                        ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
                        byte[] b = new byte[1024];
                        int n;
                        while ((n = fis.read(b)) != -1) {
                                bos.write(b, 0, n);
                        }
                        fis.close();
                        bos.close();
                        buffer = bos.toByteArray();
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return buffer;
        }

        /***
         * 取图片的md5值,截取16个字符,进行存储。与后台对应
         * 
         * @param i
         * @return
         */
        public String getMd5(int i) {
                String ss = "";
                byte[] bytes = file2byte(i);
                try {
                        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                        messageDigest.update(bytes);
                        byte[] digest = messageDigest.digest();
                        for (int j = 0; j < digest.length; j++) {
                                ss += String.format("%x", digest[j]);
                        }
                        // Log.v("sss--->", ss.substring(8, 24));
                } catch (NoSuchAlgorithmException e) {
                        e.printStackTrace();
                }
                return ss.substring(8, 24);
        }


这样C#和java加密后的值是一样的,由于MD5生成的是32位,我们直接取中间的16位,当然这个可以自己定义取任意位置。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-19 05:22

© 2014-2021

快速回复 返回顶部 返回列表