gpt4 book ai didi

Java逐字加密

转载 作者:行者123 更新时间:2023-12-01 05:13:26 25 4
gpt4 key购买 nike

我正在尝试获取一个长字符串并使用以下代码对其进行加密:

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;

public class AESEncrypt {

/**
* Turns array of bytes into string
*
* @param buf
* Array of bytes to convert to hex string
* @return Generated hex string
*/
public static String asHex(byte buf[]) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;

for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");

strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}

return strbuf.toString();
}

public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character
.digit(s.charAt(i + 1), 16));
}
return data;
}

public static void main(String[] args) throws Exception {

String message = "Test text!";

// Get the KeyGenerator
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128); // 192 and 256 bits may not be available

// Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
System.out.println("Key: " + asHex(raw));

// Instantiate the cipher

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

byte[] encrypted = cipher.doFinal((args.length == 0 ? message : args[0]).getBytes());
System.out.println("encrypted string: " + asHex(encrypted));

}
}

但是,我想逐字加密并打印出加密文本,如下所示:

原始字符串 -> 测试文本!

加密字符串 -> 29f84h2f 23f9f92jf3

我在网上找不到任何可以帮助我的示例。无论如何我可以实现这个目标吗?

最佳答案

AES 是一种分组密码,它使用 16 字节 block 。它不是在文字中起作用,而是在固定的 block 中起作用。如果您想将文本分割成不同大小的单词,那么您可能会通过使用流密码(例如 RC4)或 CTR 模式下的 AES(这可以有效地将 AES 转换为流密码)来更接近您想要的结果。流密码不以 block 为单位,而是以字节为单位。对于 3 个字母的单词,您可以从流中取出 3 个字节,对于 9 个字母的单词,可以从流中取出 9 个字节。

您需要弄清楚如何处理单词之间的空格、标点符号等。您还需要考虑重新输入密码的频率。您想要为每个单独的单词重新键入 key ,还是只在每个字符串的开头重新键入 key ?与任何流密码一样,切勿两次使用相同的 key 。

关于Java逐字加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11683946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com