当前位置: 首页 > news >正文

石家庄住房和建设局网站/网页代码模板

石家庄住房和建设局网站,网页代码模板,湖南省郴州市临武县,怎样做网站标题优化看到有个毕设是搞图片防篡改的,就自己撸了一个简易图片防止篡改。原理将图片字节生成字符串使用摘要算法加密,将加密生成的字节写到图片最后。验证时,首先读取末尾的加密字节,读取完成以后删除,再通过摘要算法加密&…

看到有个毕设是搞图片防篡改的,就自己撸了一个简易图片防止篡改。

原理

将图片字节生成字符串使用摘要算法加密,将加密生成的字节写到图片最后。验证时,首先读取末尾的加密字节,读取完成以后删除,再通过摘要算法加密,判断加密值与读取加密值是否相同,如果不同,则图片被篡改。我在这里使用加盐的md5算法。

图片防止篡改部分

第一步,获取图片的md5字符串,并转为字节数组

//将图片使用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 "";

}

}

第二步,图片末尾加md5字节数组

//图片末尾加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();

}

第三步,封装一下

//防止图片被篡改

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

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

imgAppendMd5Bytes(file,md5bytes);

}

图片验证部分

第一步,获取图片的末尾存储的md5字节数组

//获取存储在图片末尾的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字节后,重新计算图片的md5值

//去除图片末尾的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();

}

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

第三步,封装为方法

//验证图片是否被篡改

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);

}

ps:这里只是一个简单的实现,并没有进行调优

http://www.lbrq.cn/news/1589311.html

相关文章:

  • 网站页面优化方案/关键词排名优化软件价格
  • 浙江企业响应式网站建设/上海专业seo公司
  • 贵阳商城网站开发/三只松鼠网络营销案例分析
  • 最优做网站/网课培训机构排名前十
  • 一学一做动漫视频网站/网络推广营销方法
  • 网站建设销售前景/站长工具是干嘛的
  • wordpress企业建站教程/搜索词排行榜
  • 学校建设网站费用申请报告/企业网站的作用和意义
  • 网站建设标准流程及外包注意事项/aso优化的主要内容
  • 网站建设方案书模板/网络营销公司注册找哪家
  • 开发一个交友app多少钱/小熊猫seo博客
  • 亿唐网不做网站做品牌/网站流量统计平台
  • wordpress首页图片导航分类/企业seo
  • 使用jquery的网站/app渠道推广
  • 佛山优化网站/seo教程自学
  • 杭州网站建设代理商/seo网站排名
  • 宁波做360网站推广/站长之家端口扫描
  • 做网站需要交印花税/现在推广引流什么平台比较火
  • 提供网站设计服务商/上海专业seo排名优化
  • 四川宜宾市网站建设公司/网站注册步骤
  • 本科生做网站编辑/设计师必备的6个网站
  • 衡水高端网站建设/抖音推广怎么做
  • 上海专业网站建设哪家好/优化营商环境的意义
  • 网站建设路由设置/国外免费ip地址
  • 做公司的网站怎么上线/加快百度收录的方法
  • 重庆企业品牌网站建设/广告公司主要做什么
  • 创意设计报告模板/百度seo教程视频
  • 国际贸易新闻最新消息/竞价托管优化公司
  • hot插件 wordpress/seo培训中心
  • 石湾建网站/凡科建站小程序
  • Linux---第二天---基础指令
  • 开疆智能ModbusTCP转Profinet网关连接EPSON机器人配置案例
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-邮箱重置密码
  • C++返回值优化(RVO):高效返回对象的艺术
  • Python深度学习:从入门到进阶
  • 7、Redis队列Stream和单线程及多线程模型