`

图片传输防篡改方法

 
阅读更多

将图片加上盐值字符串,使用MD5信息摘要算法生成图片的数字指纹,将数字指纹加到图片最后。验证时,先读取图片末尾的数字指纹,再通过MD5摘要算法,对图片加盐字符串计算出数字指纹,判断数字指纹是否相同,如果不同,则图片被篡改。

 

package com.tx.img;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.RandomAccessFile;

import java.math.BigInteger;

import java.nio.channels.FileChannel;

import java.security.MessageDigest;

import java.util.Arrays;

 

public class PreventImgTamper {

 

    private static final String SALT="whatisyouradd";//md5加盐

 

 

    public static void main(String args[]) throws Exception{

        File file=new File("D:/java_work/img/16p2.jpg");

        preventTamper(file,SALT);//图片末尾加md5

        boolean notTamper=notTamper(file,SALT);

        System.out.print("图片没有被篡改?"+notTamper);

    }

 

    //验证图片是否被篡改

    private static boolean notTamper(File file,String salt) throws Exception{

        byte[] storageMd5=popMd5Bytes(file);//获取存储在图片末尾的16个md5字节

        imgDelEndMd5Bytes(file);//删除末尾md5字节数组

        byte[] imgMd5=img2Md5Bytes(file,salt);

        return Arrays.equals(storageMd5,imgMd5);

    }

 

    //获取存储在图片末尾的16个md5字节

    public static byte[] popMd5Bytes(File file) throws Exception{

        RandomAccessFile accessFile=new RandomAccessFile(file,"rw");

        byte[] bytes=new byte[16];

        long length=accessFile.length();

        accessFile.seek(length-16);

        for (int i=0;i<16;i++){

            bytes[i]=accessFile.readByte();

        }

        accessFile.close();

        return bytes;

    }

 

    //去除图片末尾的16个md5字节

    private static void imgDelEndMd5Bytes(File file) throws Exception{

        RandomAccessFile accessFile=new RandomAccessFile(file,"rw");

        FileChannel fc = accessFile.getChannel();

        fc.truncate(accessFile.length()-16);

        fc.close();

        accessFile.close();

    }

 

    //防止图片被篡改

    private static void preventTamper(File file,String salt) throws Exception{

        byte[] md5bytes=img2Md5Bytes(file,salt);

        imgAppendMd5Bytes(file,md5bytes);

    }

 

 

    //图片末尾加md5

    private static void imgAppendMd5Bytes(File file,byte[] md5Bytes) throws Exception{

        RandomAccessFile accessFile=new RandomAccessFile(file,"rw");

        long length=accessFile.length();

        accessFile.seek(length);

        accessFile.write(md5Bytes);

        accessFile.close();

    }

 

    //将图片使用md5加密

    private static byte[] img2Md5Bytes(File file,String salt) throws Exception{

        FileInputStream inputStream=new FileInputStream(file);

        StringBuilder builder=new StringBuilder();

        byte[] bytes=new byte[1024];

        int bytesRead;

        while ((bytesRead=inputStream.read(bytes))!=-1){

            builder.append(new String(bytes,0,bytesRead));

        }

        inputStream.close();

        builder.append(salt);

        String md5=md5(builder.toString());

        return hexStringToBytes(md5);

    }

 

    //16进制转字节数组

    private static   byte[] hexStringToBytes(String hexString) {

        if (hexString == null || hexString.equals("")) {

            return null;

        }

        hexString = hexString.toUpperCase();

        int length = hexString.length() / 2;

        char[] hexChars = hexString.toCharArray();

        byte[] d = new byte[length];

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

            int pos = i * 2;

            d[i] = (byte) (charToByte(hexChars[pos]) << 6 | charToByte(hexChars[pos + 1]));

        }

        return d;

    }

    private static byte charToByte(char c) {

        return (byte) "0123456789ABCDEF".indexOf(c);

    }

 

 

    //md5加密字符串

    private static String md5(String str) {

        try {

            MessageDigest md = MessageDigest.getInstance("MD5");

            md.update(str.getBytes());

            return new BigInteger(1, md.digest()).toString(16);

        } catch (Exception e) {

            return "";

        }

    }

 

}

 

分享到:
评论

相关推荐

    java实现的图片防篡改功能

    在IT行业中,图片防篡改是一项重要的安全技术,主要用于保护图像数据不被恶意修改。Java作为广泛应用的编程语言,提供了丰富的库和工具来实现这样的功能。在这个项目中,我们主要探讨如何利用Java实现图片的防篡改...

    行业分类-设备装置-一种并行传输图片的方法、装置及系统.zip

    10. **安全性**:在高速传输图片时,数据安全也是重要的一环,可能涉及到加密传输、访问控制和防篡改措施。 综上所述,这个压缩包中的“一种并行传输图片的方法、装置及系统.pdf”文件可能会详细介绍以上提到的各个...

    图片加密解密代码说明

    这种加密方式具有较好的防剪裁攻击能力,能够有效抵御图片传输过程中的噪声攻击和剪裁攻击。 **技术特点:** - **优点**:具有良好的防剪裁攻击性能,能有效抵抗噪声攻击。 - **缺点**:加密过程可能会影响图片质量...

    XPS格式转换成图片工具.rar,word转换成图片工具

    XPS文件通常包含文本、图像和图形,并且支持数字签名,确保文件完整性和防篡改。 转换工具的主要功能是将XPS文件转换为图片格式,如JPG和BMP。JPG(Joint Photographic Experts Group)是广泛使用的压缩图像格式,...

    [上传下载]用LOGO 水印的图片上传程序_image_act.zip

    - 防篡改:水印还可以用于版权保护,通过嵌入不可见的数字水印,使得图片被篡改时可以追踪源头。 3. 前后端分离: - 前端处理:在某些情况下,图片的水印处理可以在前端完成,利用JavaScript库如HTML5的Canvas ...

    梦凌NET图片管理系统

    可能还包含了防篡改和备份恢复机制,保证图片数据的安全。 7. 性能优化:考虑到大量图片的存储和加载,系统可能会有图片缩略图生成、CDN加速、缓存策略等优化措施,提高用户体验。 8. 源码提供:"AspxCn说明.txt...

    北方女孩图片管理

    5. **安全性与隐私保护**:系统应具有防止未授权访问、图片篡改和数据泄露的安全措施,例如使用HTTPS加密传输、限制IP访问、设置访问密码等。 6. **数据库存储**:图片数据可能存储在关系型数据库(如MySQL)或...

    一贝图片投票系统 v6.7 (防刷票版).zip

    6. **安全防护**:系统可能采用HTTPS加密协议,保证数据传输的安全,防止数据被窃取或篡改。同时,后台可能有防火墙和入侵检测系统,以应对潜在的安全威胁。 7. **界面友好与自定义**:一贝图片投票系统的用户界面...

    淘宝海量图片存储与CDN系统

    淘宝的图片系统可能包含防火墙、DDoS防护、SSL加密等安全措施,保护图片数据不被非法访问或篡改。 总的来说,淘宝海量图片存储与CDN系统是通过分布式存储、高效CDN、智能缓存策略、实时监控和调度、成本优化以及...

    可防盗图片文件,音乐文件,下载文件

    HTTPS协议结合SSL/TLS证书,可以提供安全的数据传输,防止中间人攻击,确保文件在传输过程中不被窃取或篡改。这对于下载文件尤为重要,确保用户从合法源头获取文件。 总结来说,防止图片、音乐和下载文件被盗用,...

    将 Shellcode 藏在图片中

    这是为了确保即使在文件传输或存储过程中Shellcode的部分信息被篡改或丢失,依然能够保证执行时的准确性。 8. 绕过脚本执行要求 某些环境下可能会有执行权限的限制,比如不允许直接执行脚本。通过将Shellcode嵌入到...

    优道图片版权保护控件 v1.6

    优道图片版权保护控件(UUDoc Image Control)是一款图片版权保护中间件产品,支持使用加密传输的方式从远程加载图片,运行时可禁止屏幕截图工具对所展示图片进行的截取,能有效的保护您所展示的图片。控件使用独特...

    文本转竖排版、防过滤、转为图片、字符画工具

    防过滤功能可能包括加密、替换敏感词汇、使用特定编码等方法,确保文本能顺利通过过滤机制,传递给目标接收者。 3. **转为图片**:将文本转换为图片可以进一步增加其安全性,因为许多过滤系统无法识别图像中的文字...

    淘淘图片批处理之星.exe

    PDF文件具有防复制、防篡改的功能。而且图像表现能力也非常的好。现在很多国际际间的合同、合作文件都通过PDF来传递、保存。是传递、保存珍贵图像资料 或扫描电子书籍的好选择。 批量制作缩略图:您可以方便的将...

    2010年10月视频触发电子警察技术要求.pdf

    - 图片格式为JPEG,符合ISO/IEC 15444:2000标准,具有防篡改功能,如图片加密和水印。 - 每个违法记录原始图片不超过四张,每张图片精确到0.1秒的时间信息,最终合并为一个文件。 这些技术要求确保了电子警察系统...

    安信天元安全电子公文传输系统和电子公章解决方案

    系统由电子公章制作软件与安全PDF版式公文制作与阅读软件两大模块构成,旨在通过PDF版式公文技术、PKI密码安全技术以及安全防泄密技术,确保文档的真实性、长期保存性和保密性。 #### 技术架构 系统的构建基于三大...

    图片隐写题包含题目和摘要

    在IT安全领域,图片隐写术(Steganography in Images)是一种重要的技术,它涉及到将秘密信息隐藏在看似普通的图像中,以实现信息的安全传输。这个主题通常与密码学、网络安全和数字媒体处理相关联。在给定的压缩包...

    恢复损坏的照片,修复JPEG

    在IT领域,照片损坏或JPEG文件出错是一个常见的问题,特别是在处理大量图片或者在不稳定的网络环境下传输图片时。"恢复损坏的照片,修复JPEG"这个主题涉及到的是如何挽救那些由于各种原因导致无法正常打开或者显示...

    nsF5隐写方法

    在实际应用中,nsF5隐写方法常用于保护敏感数据传输、版权保护和防篡改通信等场景。然而,随着隐写分析技术的发展,如何有效地防止隐写信息被检测也成为了一个重要的研究方向。因此,不断改进和完善隐写算法,使其更...

Global site tag (gtag.js) - Google Analytics