我正在创建一个APP,并且只需要刻印图像的内容。我需要文件转换后仍然是图像,但是显示的图像不会显示为原始图像。
例如,我将加密的图像发送给其他用户,并且该用户将能够显示和成像(但不是原始图像),但是原始图像已在该文件中加密。
使用以下算法,我加密了整个文件,由于标头也被加密,因此无法将其作为图像打开。
我正在使用此算法,但我不知道如何仅加密数据或如何在Java / Android中添加/修改图像的标头:
public byte[] encrypt_image(Bitmap bm, String password_) {
byte[] encryptedData = null;
try{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
byte[] keyStart = password_.getBytes();
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
sr.setSeed(keyStart);
kgen.init(128, sr);
SecretKey skey = kgen.generateKey();
byte[] key = skey.getEncoded();
// Encrypt
encryptedData = Security.encrypt(key,b);
}catch (Exception e) {
Log.e("encrpyt_image()", e.getMessage());
}
return encryptedData;
}
任何人都有关于如何进行整理的想法,我一直在互联网上搜索,但没有成功。
我猜想get / setPixels方法可能是最简单的方法。
int[] pixels = new int[bm.getWidth() * bm.getHeight()];
bm.getPixels(pixels, 0, bm.getWidth(), 0, 0, bm.getWidth(), bm.getHeight());
encryptIntArray(pixels);
bm.setPixels(pixels, 0, bm.getWidth(), 0, 0, bm.getWidth(), bm.getHeight());
现在,您只需要编写cryptoIntArray方法。
编辑:您也可以尝试使用ByteBuffer,则不必进行转换。
ByteBuffer bb = ByteBuffer.allocate(bm.getByteCount());
bm.copyPixelsToBuffer(bb);
byte[] b = bb.array();
bm.copyPixelsFromBuffer(ByteBuffer.wrap(Security.encrypt(key,b)));
我还没有测试过该代码。
问题内容: 结合我的另一个问题,并在更改了这部分代码之后 从解密部分,我遇到了另一个错误,这是 当我单击SheepTest.png时,文件为空。错误在哪里?谁能帮助我解决错误?谢谢。 问题答案: 我猜想这行返回null: 文档说明: “如果没有注册的ImageReader声称能够读取结果流,则返回null。” 空值将传递给此调用,从而导致NPE: 我不熟悉此API,但是从文档和此处看到的内容中,我
文件加密 案例描述 近些年来,因为信息泄露造成财产损失的事件时有发生。随着科技的发展,信息的传播与获取越来越方便,为了防止因信息泄露造成的各种危机,信息加密技术应得到充分的重视。本案例要求设计程序,对已经存在的文件进行加密和解密。 案例分析 文件加密的目的是保证信息的安全,加密的原理是根据某种原则,对源文件中的信息进行修改,使加密后的文件在与源文件仍保持联系的情况下,不会直接反映出源文件中存储的信
问题内容: 我有一个奇怪的问题 我的解决方案基于将硬编码文件解密为字节[] 因此,我写了一个小的Cypher类来帮助进行加密/解密…它曾经用来模拟在某个地方进行硬编码的密钥,以及另一个在其他地方存储的预加密密钥。但这与atm无关。 加密过程如下: 检索硬编码的字节数组 用它来解密key2 使用key2解密数据 使用key1进一步解密数据 已解密数据 我将加密的数据存储为十六进制字符串,使用这两个函
问题内容: 我正在尝试编写一个简单的程序来使用AES算法对文件进行加密和解密。我在加密方面没有问题,但是在解密方面.. 这是解密部分: } 现在的问题是解密部分是:使用填充密码解密时,输入长度必须是16的倍数 我知道我错误地保留了会话密钥和字节的错误丢失了。但是我该如何正确地做呢? 问题答案: 您的代码中有些混乱,可能是因为缺少了您调用的某些方法,或者可能是因为您使用的是密钥来加密…您的密钥(!!
问题内容: 我有一个名为’filename.txt.pgp’的PGP文件,需要解密。当我从命令行运行解密时,它仅询问我密码。我使用gpg命令: 密码足够,我的文件已解密。我可以阅读它的内容。 现在,我应该用Java创建一个实用程序。经过研究,我发现Bouncy Castle图书馆是我最好的选择。但是我可以找到的所有Java示例都使用我没有的公共/专用密钥文件。 您能帮我举一个Java示例,该示例仅
我不完全确定我该做什么了。我一直在网上到处乱翻东西,通读例子,但它们似乎都是如何加密一整个文件,或者只是加密一段数据,除了立即再次解密之外什么也不做。我该如何处理逐行书写?