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

关于身份证图片加密安全技术[通俗易懂]前言现在的图片都是上传到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架构进阶资料。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Adaptive thresholding using the integral image

    Adaptive thresholding using the integral image#include #include #include#includeusingnamespacestd; voidvvAdaptiveThreshold(IplImage*inImg,IplImage*outImg){intS=inImg->width>>5;intT=10;char*input,*bin;

  • 记tomcat部署war包的配置

    记tomcat部署war包的配置记tomcat部署war包的配置将war包放入Tomcat中将war包放到Tomcat目录下的webapps文件夹中;(大多数人的选择)如果放在此文件内,可能会导致项目路径出现问题。可以在Tomcat目录下自定义一个文件夹这里是自定义的myapps文件夹。定义war包路径打开conf/server.xml进行修改找到<host>部分,在其中加入代码<…

  • 浅复制,深复制详解下载_复制时如何跳过一部分内容

    浅复制,深复制详解下载_复制时如何跳过一部分内容文章目录浅复制和深复制String类实现浅复制和深复制有关浅复制与深复制的定义为:对类进行复制的时候按位复制,即把一个对象各数据成员的值原样复制到目标对象中。当类中涉及到指针类型数据成员的时候,往往就会产生指针悬挂问题。看以下结构:class A{ public: int* a;};A a1;A b1=a1;b1=a1执行的是浅复制,此时a1.a和b1….

  • php三个数从大到小排列_php常用的流程控制语句

    php三个数从大到小排列_php常用的流程控制语句<?php$a = rand(100,999);$b = rand(100,999);$c = rand(100,999);echo “a=”.”$a”.”<br>”;echo “b=”.”$b”.”<br>”;echo “c=”.”$c”.”<br>”;if(($a > $b ) && ($a > …

  • PDAF原理_pfc作用

    PDAF原理_pfc作用PDAF原理:参考链接:https://www.cnblogs.com/sunny-li/p/9131017.htmlPDAF今天来讲一讲PDAF(相位对焦)的基本原理。在自动对焦的时候总是有一个困惑,知道图像是不清楚的,但是lens应该向前还是向后移动呢?总是要前后移动lens一下才知道,普通的反差法对焦就是这么做的,爬山嘛。PDAF的出现就是为了解决这个lens移动的问题…

  • JNI总结(一)

    JNI总结(一)

发表回复

您的电子邮箱地址不会被公开。

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