我的代码有问题。
我想做的是使用 ECB 模式加密文件(也就是说,加密文本块而不链接到下一个块)。
有时它可以完美地工作,但有时却不能。当它加密 128 字节数据并写入 129 字节时,问题就出现了。它会完美地工作,直到第一次这样做,但随后解密将丢失一个字节,并且会使一切变得混乱。我知道这一点是因为当它出错时,你可以看到密码(第 88 行,一个字节数组)的长度是 129,而不是 128,然后它被写入文件。
这是我的意思的一个例子: 加密:testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest
输出:testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest(500字节的混乱数据)
我已经附上了我的完整代码;为了快速运行,我启用了解密以在加密后立即生成到标准输出。
因此,只需运行: -k key (将生成 key.public 和 key.private) -e key.public -i input -o output (将加密一些文件输入并将其存储在输出中,读取该文件,解密它,发送到标准输出)。
任何帮助,将不胜感激!
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Scanner;
import java.io.*;
import java.util.List;
import java.util.Random;
public class RSA {
public static void main(String[] args) throws UnsupportedEncodingException {
List<String> list = Arrays.asList(args);
if(list.contains("-h")) {
System.out.println("Usage:");
System.out.println("RSA …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Hex Key进行XOR实现.当这个代码(语法明显改变,但同样的想法)在C中执行,然后转换为十六进制时,结果是44 D6 B4 7E
但是当我在PHP中运行此代码时,我得到36 32 31 31
很明显,每个$ string索引都会返回一个整数,但是为什么(对我而言)并不是很清楚.
这是我的PHP代码:
<?php
$text = "data";
$key = array(0x20, 0xB7, 0xC0, 0x1F);
function xor_encrypt($string, $key) {
for($i=0; $i<strlen($string); $i++) {
$string[$i] = ord($string[$i]) ^ $key[$i % sizeof($key)];
}
return $string;
}
echo xor_encrypt($text, $key);
?>
Run Code Online (Sandbox Code Playgroud)
这是C代码
BYTE m_btKey[4] = { 0x20, 0xB7, 0xC0, 0x1F };
for ( UINT i = 0; i < m_uDataLen; ++i )
m_szData[i] ^= ( m_btKey[i % sizeof(m_btKey)] );
Run Code Online (Sandbox Code Playgroud)