⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lsb.c

📁 信息隐藏与水印技术的经典隐写算法的lsb算法的加密
💻 C
字号:
// Author: chenxiang
// Data: 2008-04-09
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
typedef struct 
{
	BYTE red;
	BYTE green;
	BYTE blue;
}RGB24;

int main(int argc, char *argv[])
{
	if (argc != 2)
	{
		printf("help\n");
		printf("    lsb  *.bmp\n");

		return 1;
	}

	FILE *fin, *fout;
	
	fin = fopen(argv[1], "rb");
	if (fin == NULL)
	{
		return 0;
	}
	
	char filename[256];
	WORD filesize;

	strcpy(filename, argv[1]);
	strcat(filename, "_result.bmp");
	fout = fopen(filename, "wb");
	if (fout == NULL)
	{
		fclose(fin);

		return 0;
	}

	BITMAPFILEHEADER bmfHeader;
	BITMAPINFOHEADER bmiHeader;

	fread(&bmfHeader, sizeof(bmfHeader), 1, fin);
	filesize = bmfHeader.bfReserved1;
	fread(&bmiHeader, sizeof(bmiHeader), 1, fin);

	RGB24 rgb;
	BYTE *array = (BYTE *)malloc(sizeof(BYTE) * bmiHeader.biHeight * bmiHeader.biWidth * 3);
	LONG i, j, k;

	k = 0;
	for (i = 0; i < bmiHeader.biHeight; i++)
	{
		for (j = 0; j < bmiHeader.biWidth; j++)
		{
			fread(&rgb, sizeof(rgb), 1, fin);
			array[k++] = rgb.red & 0x01;
			array[k++] = rgb.green & 0x01;
			array[k++] = rgb.blue & 0x01;
		}
	}

	BYTE data;
	for (i = 0; i < filesize; i++)
	{
		data = 0;
		for (j = 0; j < 8; j++)
		{
			data += array[8 * i + j] * pow(2, 7 - j);
		}

		fwrite(&data, sizeof(data), 1, fout);
	}

	free(array);

	fclose(fin);
	fclose(fout);

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -