美文网首页
Bitmap 图片隐写术

Bitmap 图片隐写术

作者: Afra55 | 来源:发表于2023-11-21 15:24 被阅读0次

在图片中加入一串加密文字,并且只能通过解码的形式看到这串文字。

[TOC]

图片写入文字

import android.graphics.Bitmap;
import android.graphics.Color;

public class Steganography {

    // 加密并嵌入文字到图片中
    public static Bitmap embedText(Bitmap originalImage, String textToHide, String password) {
        byte[] encryptedText = encryptText(textToHide, password);
        int[] pixels = new int[originalImage.getWidth() * originalImage.getHeight()];
        originalImage.getPixels(pixels, 0, originalImage.getWidth(), 0, 0, originalImage.getWidth(), originalImage.getHeight());

        // 在像素中嵌入加密后的文字
        for (int i = 0; i < encryptedText.length; i++) {
            int pixel = pixels[i];
            int red = Color.red(pixel);
            int newPixel = Color.argb(255, red, Color.green(pixel), Color.blue(pixel));
            pixels[i] = newPixel | ((encryptedText[i] & 0xFF) << 24);
        }

        Bitmap stegoImage = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), Bitmap.Config.ARGB_8888);
        stegoImage.setPixels(pixels, 0, originalImage.getWidth(), 0, 0, originalImage.getWidth(), originalImage.getHeight());
        return stegoImage;
    }

    // 解码并解密图片中隐藏的文字
    public static String extractText(Bitmap stegoImage, String password) {
        int[] pixels = new int[stegoImage.getWidth() * stegoImage.getHeight()];
        stegoImage.getPixels(pixels, 0, stegoImage.getWidth(), 0, 0, stegoImage.getWidth(), stegoImage.getHeight());

        // 从像素中提取加密后的文字
        byte[] extractedText = new byte[pixels.length];
        for (int i = 0; i < pixels.length; i++) {
            int alpha = (pixels[i] >> 24) & 0xFF;
            extractedText[i] = (byte) alpha;
        }

        return decryptText(extractedText, password);
    }

    // 使用AES加密算法加密文字
    private static byte[] encryptText(String text, String password) {
        // 在这里实现使用AES加密算法加密文字的逻辑
        // 返回加密后的字节数组
        return new byte[0];
    }

    // 使用AES加密算法解密文字
    private static String decryptText(byte[] encryptedText, String password) {
        // 在这里实现使用AES加密算法解密文字的逻辑
        // 返回解密后的文字
        return "";
    }
}

文字加密解密

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import android.util.Base64;

public class AES {

    private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";
    private static final String KEY_ALGORITHM = "AES";
    private static final int KEY_SIZE = 128;
    private static final byte[] IV = "1234567890123456".getBytes();

    // 使用AES算法加密文字
    public static String encrypt(String text, String password) {
        try {
            // 生成密钥
            SecretKeySpec secretKey = new SecretKeySpec(getKeyBytes(password), KEY_ALGORITHM);

            // 初始化加密器
            Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(IV);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);

            // 加密数据
            byte[] encryptedBytes = cipher.doFinal(text.getBytes());

            // 对加密结果进行Base64编码
            return Base64.encodeToString(encryptedBytes, Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // 使用AES算法解密文字
    public static String decrypt(String encryptedText, String password) {
        try {
            // 生成密钥
            SecretKeySpec secretKey = new SecretKeySpec(getKeyBytes(password), KEY_ALGORITHM);

            // 初始化解密器
            Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(IV);
            cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);

            // 对Base64编码的加密结果进行解码
            byte[] encryptedBytes = Base64.decode(encryptedText, Base64.DEFAULT);

            // 解密数据
            byte[] decryptedBytes = cipher.doFinal(encryptedBytes);

            return new String(decryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // 从密码中获取16字节的加密密钥
    private static byte[] getKeyBytes(String password) {
        byte[] keyBytes = new byte[KEY_SIZE / 8];
        byte[] passwordBytes = password.getBytes();
        System.arraycopy(passwordBytes, 0, keyBytes, 0, Math.min(passwordBytes.length, keyBytes.length));
        return keyBytes;
    }
}

在实际应用中,为了确保安全性,应该使用一个随机的 IV(初始向量)来提高加密强度。

相关文章

  • 图片写隐术

    http://blog.csdn.net/qq_32400847/article/details/61627912

  • CTF隐写术详解

    一、隐写术可以利用图片、音频、视频为载体将数据隐藏在其中,将数据隐写到图像中较为常见。 二、图像隐写术进行数据隐写...

  • 图片隐写术总结

    隐写术有的时候难,就是难在了一张图片有太多的地方可以隐藏信息了,有的时候根本连隐藏的载体都找不到,在你的眼里他就是...

  • WpsecCTF Stega部分

    1 隐写术1 保存图片至本地,发现底部缺少一部分,修改png的高度,即可得到flag 2 隐写术2 下载文件,发现...

  • Python3图片隐写术

    效果展示 可以看到“施法”前后的图片肉眼看不出区别,然而图片却真是的隐藏了一些数据在里面。 程序的实现 先导入 P...

  • CTF 基础3(图片隐写术)

  • Python3 图片隐写术

    先看看下面两张图,有什么差别。 看不出来吧?其实右图中隐藏了一段文字,只是通过一般手段无法察觉,需要编码才能破解,...

  • 隐写术

    常用工具 1.binwalk2.stegsolve(查找LSB隐藏痕迹)3.linux自带命令:file(分析文件...

  • 隐写术

    原文 给我的第一印象是看他的十六进制编码,上上下下翻了一遍什么都没找到。用Stegsolve看了下,很快就找到了key。

  • Python信息安全技术篇(一)简单实现入门级隐写术

    前言 利用Python简单实现图片隐写术,废话不多说,直接开始吧~ 开发工具 Python版本: 3.5.4 相关...

网友评论

      本文标题:Bitmap 图片隐写术

      本文链接:https://www.haomeiwen.com/subject/ptnbwdtx.html