使用异或对图片进行加密

import java.io.*;
class ImageTest 
{
	public static void main(String[] args)  throws Exception
	{
		//找到图片文件
		File inFile = new File("e:\\加密的图片.jpg");
		File outFile = new File("e:\\解密的图片.jpg");

		//建立数据通道,让图片的二进制数据流入
		FileInputStream input = new FileInputStream(inFile);
		FileOutputStream output = new FileOutputStream(outFile);
		//边读,把读到的数据异或一个数据,把把数据写出

		int content = 0; //该变量是用于存储读取到的数据
		while((content = input.read())!=-1){  // 如果没有到文件的末尾,那么继续读取数据,读取到的数据已经存储到content变量中了。
			output.write(content^12);
		}
	
			
		//关闭资源
		output.close();
		input.close();

	}
}

混沌加密是一种基于混沌理论的加密方法,它利用混沌系统的不可预测性和复杂性,对明文进行加密,从而保证了加密的安全性和可靠性。在图像加密中,可以使用混沌序列对像素值进行加密。 下面是一个使用C语言进行图像混沌加密编码的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define PI 3.14159265358979323846 double logistic(double x, double r) { return r * x * (1 - x); } void chaos(double *x, double r, int n) { int i; for (i = 0; i < n; i++) { x[i + 1] = logistic(x[i], r); } } void encrypt(int *data, int n, double r) { double x0 = 0.123456789; double *x = (double*) malloc((n + 1) * sizeof(double)); chaos(x, r, n); int i; for (i = 0; i < n; i++) { data[i] ^= (int) (x[i + 1] * 255); } free(x); } int main() { FILE *fp = fopen("lena.bmp", "rb"); int i, j; unsigned char header[54]; fread(header, sizeof(unsigned char), 54, fp); int width = *(int*)&header[18]; int height = *(int*)&header[22]; int size = 3 * width * height; unsigned char *img = (unsigned char*) malloc(size * sizeof(unsigned char)); fread(img, sizeof(unsigned char), size, fp); fclose(fp); int *data = (int*) malloc(size/3 * sizeof(int)); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { int index = 3 * (i * width + j); data[i * width + j] = img[index]; } } encrypt(data, size/3, 4.0); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { int index = 3 * (i * width + j); img[index] = (unsigned char) data[i * width + j]; img[index + 1] = (unsigned char) data[i * width + j]; img[index + 2] = (unsigned char) data[i * width + j]; } } fp = fopen("lena_encrypted.bmp", "wb"); fwrite(header, sizeof(unsigned char), 54, fp); fwrite(img, sizeof(unsigned char), size, fp); fclose(fp); free(img); free(data); return 0; } ``` 这个示例代码使用了一个简单的混沌系统——logistic映射。它生成一个在[0,1]区间内的混沌序列,然后将其放大到[0,255]区间内,并将其与原图像的像素值进行异或运算,得到加密后的像素值。这个加密过程可以通过反向运算进行解密。 需要注意的是,这个示例代码只对灰度图像进行加密,对于彩色图像需要对RGB三个通道分别进行加密。同时,这个加密方法仍然存在一些安全问题,比如容易受到已知明文攻击等,因此在实际应用中需要使用更加严格的加密算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值