关于身份证图片加密安全技术[通俗易懂]

关于身份证图片加密安全技术[通俗易懂]前言现在的图片都是上传到cdn或者其它第三方服务器上,通过一个url进行访问,非常的方便,方便的同时也带来了另外一个问题,隐私安全问题,比如:好莱坞隐私照片泄漏。如何保证图片安全如果发生客户隐私图片的泄漏,将是非常严重的事情,会使当事人遭受到骚扰、企业遭受到质疑,那么如何保证用户上传图片的安全将是一件值得重视的事情,本篇介绍一种加密方式:异或加密。算法原理异或的运算方法是一个二进制运算:1^1=00^0=01^0=10^1=1两者相等为0,不等为1。对于一个字符来说,都可以用二进制

大家好,又见面了,我是你们的朋友全栈君。

前言

现在的图片都是上传到c d n或者其它第三方服务器上,通过一个url进行访问,非常的方便,方便的同时也带来了另外一个问题,隐私安全问题,比如:好莱坞隐私照片泄漏。

如何保证图片安全

如果发生客户隐私图片的泄漏,将是非常严重的事情,会使当事人遭受到骚扰、企业遭受到质疑,那么如何保证用户上传图片的安全将是一件值得重视的事情,本篇介绍一种加密方式:异或加密。

算法原理

异或的运算方法是一个二进制运算:
1^1=0
0^0=0
1^0=1
0^1=1

两者相等为0,不等为1。

对于一个字符来说,都可以用二进制码来表示。如A:01000001
字符的异或就是对每一位进行二进制运算。

用于加密算法时,假设你要加密的内容为A,密钥为B,则可以用异或加密:
C=A^B
在数据中保存C就行了。
用的时候:
A=B^C
即可取得原加密的内容,所以只要知道密钥,就可以完成加密和解密。

代码实现

文件上传工具类

import java.io.*;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Copyright (c) 2011-2021 <br>
 * Company: 公众号:超漫时光 <br>
 * Description:  <br>
 *
 * @author cool_summer_moon <br>
 * @date 2021/3/16 9:30 上午<br>
 */
public class FileUtil {

    private static int dataOfFile = 0; // 文件字节内容
    private static String key = "coolsummermoon&^%$$^Q**";
    private static int[] array; //存放每个hash值的数组

    public static void main(String[] args) {

        File srcFile = new File("/Users/coolsummermoon/Documents/C100.jpg"); // 初始文件
        File encFile = new File("/Users/coolsummermoon/Documents/C101.jpg"); // 加密文件
        File decFile = new File("/Users/coolsummermoon/Documents/C102.jpg"); // 解密文件

        array = string2ASCII(getMD5(key));

        try {
            EncFile(srcFile, encFile); //加密操作
            DecFile(encFile, decFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void EncFile(File srcFile, File encFile) throws Exception {
        if (!srcFile.exists()) {
            System.out.println("source file not exixt");
            return;
        }

        if (!encFile.exists()) {
            System.out.println("encrypt file created");
            encFile.createNewFile();
        }
        InputStream fis = new FileInputStream(srcFile);
        OutputStream fos = new FileOutputStream(encFile);

        int i = 0;
        while ((dataOfFile = fis.read()) > -1) {

            fos.write(dataOfFile ^ array[i++]);
            if (i == array.length - 1) {
                i = 0;
            }
        }
        System.out.println(i + "");

        fis.close();
        fos.flush();
        fos.close();
    }

    // 4176587
    private static void DecFile(File encFile, File decFile) throws Exception {
        if (!encFile.exists()) {
            System.out.println("encrypt file not exixt");
            return;
        }

        if (!decFile.exists()) {
            System.out.println("decrypt file created");
            decFile.createNewFile();
        }

        InputStream fis = new FileInputStream(encFile);
        OutputStream fos = new FileOutputStream(decFile);

        int i = 0;
        while ((dataOfFile = fis.read()) > -1) {

            fos.write(dataOfFile ^ array[i++]);
            if (i == array.length - 1) {
                i = 0;
            }
        }
        System.out.println(i + "");

        fis.close();
        fos.flush();
        fos.close();
    }

    //String2Ascii
    public static int[] string2ASCII(String s) {// 字符串转换为ASCII码
        if (s == null || "".equals(s)) {
            return null;
        }

        char[] chars = s.toCharArray();
        int[] asciiArray = new int[chars.length];

        for (int i = 0; i < chars.length; i++) {
            asciiArray[i] = char2ASCII(chars[i]);
        }
        return asciiArray;
    }

    public static int char2ASCII(char c) {
        return (int) c;
    }

    public static String getMD5(String sInput) {

        String algorithm = "";
        if (sInput == null) {
            return "null";
        }
        try {
            algorithm = System.getProperty("MD5.algorithm", "MD5");
        } catch (SecurityException se) {
        }
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance(algorithm);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        byte buffer[] = sInput.getBytes();

        for (int count = 0; count < sInput.length(); count++) {
            md.update(buffer, 0, count);
        }
        byte bDigest[] = md.digest();
        BigInteger bi = new BigInteger(bDigest);
        return (bi.toString(16));
    }
}

结束语

异或的图片加密方式密钥越复杂、密钥的储存越安全,加密的图片就越安全。如果本篇内容对你有帮助,请点个赞,再加个关注。
来自夏夜凉月的博客截图
微信扫码,关注一位有故事的程序员。关注后(回复:1024),领取海量Java架构进阶资料。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151974.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm卸载不了_pycharm卸载pymysql

    pycharm卸载不了_pycharm卸载pymysql本菜鸡入坑python不久。今日被lda折磨,某个动机下想要卸载lda,知识不够,后碰巧用pipunstalllda命令实现。注:本菜鸡安装时用的pipinstalllda方法。又是酸爽的填坑跳坑挖坑的一顿操作→_→。。…

    2022年8月29日
    1
  • jdbc java_jpa使用

    jdbc java_jpa使用SpringBoot集成jpa网上有很对jpa的介绍,但是都不是很全,这边根据公司的实际使用情况进行的总结。JPA、Hibernate、Springdatajpa之间的关系主要参考https://my.oschina.net/u/3080373/blog/1828589大家可以读一下这篇文章什么是JPA?全称JavaPersistenceAPI,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。为我们提供了:1)ORM映射元数据:JPA支持XML

    2022年10月20日
    0
  • split方法_js字符串截取split

    split方法_js字符串截取split描述split()通过指定分隔符对字符串进行切片,如果参数num有指定值,则仅分隔num+1个子字符串语法split()方法语法:str.split(str="",

    2022年8月3日
    3
  • 朴素贝叶斯分类器_sklearn朴素贝叶斯分类器

    朴素贝叶斯分类器_sklearn朴素贝叶斯分类器所谓分类,就是根据事物的特征(Feature)对其归类(Class)特征的数据特点有两种可能:1.离散/标签2.连续/浮点数(大样本/小样本)下面我们分别来看一、离散/标签这是一个病人

    2022年8月3日
    6
  • WinRAR去广告(简体中文版)[通俗易懂]

    WinRAR去广告(简体中文版)[通俗易懂]1.官网下载WinRAR:www.rarlab.com选择简体中文版-ChineseSimplified(32bit,64bit),根据自己需要选择32或64位2.安装并注册(1)直接安装即可(2)注册:新建一个txt文件,拷入一下文本保存,并将文件重命名为:rarreg.key,注意文件后缀为.key,并将文件拷到WinRAR安装路径下。…

    2022年6月12日
    46
  • PyCharm安装torch以及pytorch-pretrained-bert简单使用

    PyCharm安装torch以及pytorch-pretrained-bert简单使用安装torch运行Pycharm中的代码时候提示ModuleNotFoundError:Nomodulenamed‘torch’。试了很多种方法都不行,然后进入官网查了下具体的安装方法,附上网址https://pytorch.org/get-started/previous-versions/。摘取一段放在这里供大家参考。#CUDA10.0pipinstalltorch===1.2.0torchvision===0.4.0-fhttps://download.pytorc

    2022年8月28日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号