如何将字符串更改为ascii值并返回字符串?

时间:2012-09-03 16:55:06

标签: java character-encoding

我正在尝试创建一个简单的加密程序,将字符串转换为等效的ASCII值,然后再将其解密为字符串或char。

import java.io.*; 
import javax.swing.*;

public class SimpleEncryption {
   public static void main (String [] args) throws Exception
  {
     BufferedReader inKb = new BufferedReader (new InputStreamReader (System.in));

     for(int i=0; i<10; i++)
     {
        String ans = JOptionPane.showInputDialog ("Hello User, would you like to encrypt or decrypt?");
        ans = ans.toUpperCase();        
        int a = 0;

        if (ans.contains("EN")||ans.contains("ENCRYPT"))
        {
           String pass = "";
           pass = JOptionPane.showInputDialog ("Please type your phrase into input:");          

           for (int j=0; j<pass.length(); j++)
           {
              char c = pass.charAt(j);
              a = (int) c;
              System.out.print(a);
           }
           break;
        }


        if (ans.contains("DE")||ans.contains("DECRYPT"))
        {
           String pass = "";
           pass = JOptionPane.showInputDialog ("Please type the encrypted code into input:");          

           for (int k=0; k<pass.length(); k++)
           {
              char c = pass.charAt(k);
              a = (int)(c);
              i = (char) a;
              System.out.print(a);
           }
           break;
        }

        System.out.println("Sorry I don't understand, please retry.");
     }
  }
}

2 个答案:

答案 0 :(得分:2)

如果你想要的东西实际上是任何java字符串(基于UTF-16)的ASCII中的编码(加密之前?),你可以在base64编码它:这个编码方案是创建的只是为了那个。

在java中进行此编码/解码是really easy(与其他语言一样)。

答案 1 :(得分:1)

您似乎想要的是获取字节数组表示输入字符串的某种字符编码(而不是加密)。然后你似乎想要显示编码字符的八进制值。如果您只需要US ASCII,那么您将获得最多177个八进制的所有(可打印)字符。如果您需要特殊字符,则需要选择更具体的字符集(IBM OEM或Western-Latin是常见字符集)。也可以使用UTF-8,但它可以将单个字符编码为多个字节。

public static String toOctalString(final byte[] encoding) {
    final StringBuilder sb = new StringBuilder(encoding.length * 4);
    for (int i = 0; i < encoding.length; i++) {
        if (i != 0) {
            sb.append("|");
        }
        sb.append(Integer.toOctalString(encoding[i] & 0xFF));
    }
    return sb.toString();
}

public static byte[] fromOctalString(final String octalString) {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream(octalString.length() / 4 + 1);
    final Matcher m = Pattern.compile("[0-7]{1,3}").matcher(octalString);
    while (m.find()) {
        baos.write(Integer.parseInt(m.group(), 8));
    }
    return baos.toByteArray();
}

public static void main(String[] args) {
    final String userInput = "owlstæd";
    // use the common Latin-1 encoding, standardized in ISO 8859 as character set 1
    // you can replace with ASCII, but the ASCII characters will encode fine for both
    final byte[] userInputEncoded = userInput.getBytes(Charset.forName("ISO8859-1"));
    final String octalString = toOctalString(userInputEncoded); 
    System.out.println(octalString);

    final byte[] userInputEncoded2 = fromOctalString(octalString);
    final String userInput2 = new String(userInputEncoded2, Charset.forName("ISO8859-1"));
    System.out.println(userInput2);
}