如何将扩展的ASCII字符作为字符串读/写到java

时间:2015-12-26 14:02:53

标签: java encryption arraylist ascii

这是我的加密计划。主要用于加密文件(文本) 程序的这一部分将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

3 个答案:

答案 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

实际上并不需要 StringWriter以及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;