public static String basicEncrypt(String s) {
String toReturn = "";
for (int j = 0; j < s.length(); j++) {
toReturn += (int)s.charAt(j);
}
//System.out.println("Encrypt: " + toReturn);
return toReturn;
}
有没有办法扭转这个来找到原始字符串?非常感谢。
答案 0 :(得分:1)
假设您只使用ASCII字符(32-255码),算法很简单:
取输入的第一个字符
如果是1
或2
- 取下并切断下两位数并转换为字符
如果是其他任何字符 - 请删除下一个数字并转换为字符
如果有一些输入
这是一个快速的scala实现:
def decrypt(s: String): String = s.headOption match {
case None => ""
case Some('1') | Some('2') => s.substring(0, 3).toInt.toChar + decrypt(s.substring(3))
case Some(_) => s.substring(0, 2).toInt.toChar + decrypt(s.substring(2))
}
答案 1 :(得分:0)
是的,如果考虑到您的原始字符串包含(32)和unicode charcode 299之间的字符,请参阅http://www.asciitable.com/
Psuedo code
ret=<empty string>
while not end of string
n=next number from string
if n<3 charcode= n + next 2 numbers
else
charcode=n + next number
ret=ret + character(charcode)
end while
空格下的字符代码(换行符和回车符)以及299以上的字符将阻止此算法。可以修复此算法以包括最多为charcode 319的字符。
答案 2 :(得分:0)
private static String basicDecrypt(String s) {
String result = "";
String buffer = "";
for (int i = 0; i < s.length(); i++) {
buffer += s.charAt(i);
if ((buffer.charAt(0) == '1' && buffer.length() == 3) || (buffer.charAt(0) != '1' && buffer.length() == 2)) {
result += (char) Integer.parseInt(buffer);
buffer = "";
}
}
return result;
}
这是一种非常基本的解密方法。它仅适用于[A-Za-z0-9]+
US ASCII。
答案 3 :(得分:0)
只是为了它的乐趣,另外两个版本; Java,US-ASCII only,chars 0x14-0xc7;
public static String basicDecrypt(String input)
{
StringBuffer output = new StringBuffer();
Matcher matcher = Pattern.compile("(1..|[2-9].)").matcher(input);
while(matcher.find())
output.append((char)Integer.parseInt(matcher.group()));
return output.toString();
}
对于0x1e-0xff,将正则表达式替换为"([12]..|[3-9].)"
......还有一些比较简洁的Linq'y C#版本。
private static string BasicDecrypt(string input)
{
return new string(Regex.Matches(input, "(1..|[2-9].)").Cast<Match>()
.Select(x => (char) Int32.Parse(x.Value)).ToArray());
}