我正在尝试创建一个简单的加密程序,将字符串转换为等效的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.");
}
}
}
答案 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);
}