这是我的加密计划。主要用于加密文件(文本)
程序的这一部分将List<Integer>
元素转换为byte []
并将其写入文本文件。不幸的是我无法提供算法。
void printit(List<Integer> prnt, File outputFile) throws IOException
{
StringBuilder building = new StringBuilder(prnt.size());
for (Integer element : prnt)
{
int elmnt = element;
//building.append(getascii(elmnt));
building.append((char)elmnt);
}
String encryptdtxt=building.toString();
//System.out.println(encryptdtxt);
byte [] outputBytes = offo.getBytes();
FileOutputStream outputStream =new FileOutputStream(outputFile);
outputStream.write(outputBytes);
outputStream.close();
}
这是解密程序从.enc文件输入的解密程序
void getfyle(File inputFile) throws IOException
{
FileInputStream inputStream = new FileInputStream(inputFile);
byte[] inputBytes = new byte[(int)inputFile.length()];
inputStream.read(inputBytes);
inputStream.close();
String fylenters = new String(inputBytes);
for (char a:fylenters.toCharArray())
{
usertext.add((int)a);
}
for (Integer bk : usertext)
{
System.out.println(bk);
}
}
由于此处使用的方法,在我的算法中要求List<Integer>
byte[]
首先转换为String
,然后转换为List<Integer>
,反之亦然。
加密期间写入文件时的元素与.enc文件中读取的元素不匹配。
我将List<Integer>
转换为byte[]
的方法是否正确?
还是别的错了? 。我知道java不能打印扩展的ASCII字符,所以我使用了这个。但是,即使这个失败了。它提供了很多?
个
有解决方案吗?
请帮助我..以及如何为其他格式(.png.mp3 ....等)
加密文件的格式可以是任何内容(不一定是.enc) thanxx
答案 0 :(得分:2)
有数千个不同的'扩展ASCII'代码,Java支持大约一百个, 但你必须告诉它使用哪个'Charset'或默认值经常导致数据损坏。
虽然以十六进制或base64表示任意“二进制”字节是常见且通常是必要的,
IF 将以保留所有256个值的方式存储和/或传输字节,通常称为“8位清除”,
和UiTreeRecord::attachParent
一样,你可以使用“ISO-8859-1”将Java File{Input,Output}Stream
代码0-255映射到0-255字节而不会丢失,因为Unicode是部分基于8859-1。
,读取(转入)char
,然后byte[]
,其中charset是名称 {{1} }
或该名称的new String (bytes, charset)
对象,以"ISO-8859-1"
的形式提供;
或者在流上创建java.nio.charset.Charset
,从缓冲区或直接从文件读取字节,使用该字符集名称或对象,并从java.nio.charset.StandardCharSets.ISO_8859_1
<读取字符和/或InputStreamReader
< / p>
,使用String
,其中charset是charset名称或对象,并写Reader
;
或者在流上创建String.getBytes(charset)
,将字节写入缓冲区或文件,使用该字符集名称或对象,并将字符和/或byte[]
写入OutputStreamWriter
但实际上并不需要 String
和Writer
以及char
。实际上,您希望将一系列String
s作为字节写入,并将一系列字节读取为Charset
s。所以就这样做:
Integer
答案 1 :(得分:0)
任意数据字节不能全部转换为任何字符编码,加密会创建数据字节,包括所有值0 - 255.
如果必须将加密数据转换为字符串格式,则标准方法将转换为Base64或十六进制。
答案 2 :(得分:-1)
在加密部分:
`for (Integer element : prnt)
{
int elmnt = element;
//building.append(getascii(elmnt));
char b = Integer.toString(elmnt).charAt(0);
building.append(b);
}`
- &gt;这会将int转换为char,例如1到&#39; 1&#39;和5到&#39; 5&#39;