- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在应对一个小挑战,试图弄清楚一个未命名的加密算法是如何工作的。原始算法如下所示:
public final String a(byte[] original)
{
this.a = original.length;
byte[] solution = new byte[8];
int i = 0;
int base = 13;
for (int si = 0; si < 8; si++)
{
for (int oi = 0; oi < a; oi++)
{
byte current = original[oi];
solution[i] = ((byte)(solution[i] + (current ^ base)));
base = (base ^ i) + solution[i];
i = (i + 1) % 8;
}
}
char[] result = new char[8];
for (int n = 0; n < 8; n++) {
result[n] = ((char)((solution[n] & 0x3F) + 48));
}
return String.valueOf(result);
}
因此,作为 byte[]
数组传递给此函数的每个字符串都将被编码为 8 字符的有点神秘的文本。我发现了其他关于此的事情:
char[] 结果
中的编码字符总是 具有值在48 和111 之间的文字 ( 0x3F + 48
).&
操作。由于 0x3F
等于二进制表示 111111
,原始字节的值是 4 种可能性之一:
00xxxxxx
:缺失的2位均为0。01xxxxxx
:两者的低地址位为一。10xxxxxx
:两者的高地址位为一。11xxxxxx
:他们两个是一个。意思是,它可能是四个字符之一。我最初考虑过反转算法,但我想问你这种算法是否可行。我试过了,走到了这一步:
public static String b(String encrypted) {
byte[][] matrix = new byte[4][20];
byte[] word = encrypted.getBytes();
for(int i = 0; i < 4; i++) {
for(int j = 0; j < word.length; j++) {
byte tmp = (byte)(word[i] - 48);
matrix[i][j] = (byte)(tmp + i);
}
}
}
我目前减去 48 并将所有 4 种可能性插入二维数组。但是我一直在解决嵌套的 for 循环,尤其是变量 i
和 base
很难找到。我所拥有的唯一信息是加密的单词以及原始单词的长度为 20 个字面值 MAX(因此是 [4][20]
维度)。
加密对我来说并不熟悉,这让我无法寻找该算法的名称。
如果可以逆转这个算法,我的下一步是什么?
最佳答案
不,在一般情况下这显然是不可逆的。
输出中实际上有 40 位信息(八个字节,每个字节 5 位 -- & 0x1F
将每个字节限制为 5 位)。这意味着只有 240 种可能的输出;可能的输入远不止于此。
如果对输入有一些限制——例如,如果已知其长度很短——则可能对此做出一些推断。但是,您没有说明任何限制,所以……
关于java - 这个加密函数是可逆的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45496715/
有人知道符合上述所有条件的算法吗?我需要指定一个种子编号,以及我希望输出数字落入的范围(这也是输入数字所在的范围)。这个函数还需要有一个反向操作的对应物。 例如: 我传递了种子 5 和范围 5-35,
如何使递归重命名操作(Linux,使用 python)可逆? 我想在Linux下使用python编写一个程序,该程序执行以下任务:批量递归重命名文件夹中的所有文件,如果文件名有子字符串X,则重命名为Y
我的数组中有三种颜色。最初,我被要求创建一个函数,该函数只需要第一个函数并将其附加到末尾或执行相反的操作,因此我创建了这个函数: // Get our colours var colours = sc
当我错误地删除了contenteditable div中的一些文本时,我可以使用Ctrl + z将其反转。 但是在我使用 javascript 做了一些改变之后。我无法使用 Ctrl + z 返回到之
我有一个 PHP 网络服务,它当前返回一个 zip 存档作为其唯一输出。我正在使用 file_get_contents 从磁盘读取 zip 存档并将其作为响应的主体发回。 我希望它以 JSON 格式返
让我解释一下:在我的用例中,系统为我提供了很多大小可以变化的字符串(字符数;长度),有时它可能非常大!问题是我必须将这个字符串保存在“SQL Server”数据库表的列中,坏消息是我不允许在这个数据库
我是一名优秀的程序员,十分优秀!