当前位置: 首页 > 知识库问答 >
问题:

JAVA DES加密输出编码

夏晋
2023-03-14

密钥:thisiskey

要加密的消息:谷歌是一家专门从事互联网相关服务的美国跨国科技公司

加密消息(UTF-8):

mñqè•ÀPŒ�øf"
ߦ\±õ¤ù'È9¢ëyT ÍQEÁ|;ëâÉ÷JWú
Google i,í\O¯‹Ýbº-¸�¬ltinational technology company specializHôJ—=ÊÍnternet-related services
Encrypt Function code:

boolean base64 = true;
key = "thisiskey";
plainText = "Google is an American multinational technology company specializing in Internet-related services";

SecretKeyFactory MyKeyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyBytes = key.getBytes();

DESKeySpec generatedKeySpec = new DESKeySpec(keyBytes);
SecretKey generatedSecretKey = MyKeyFactory.generateSecret(generatedKeySpec);

Cipher generatedCipher = Cipher.getInstance("DES");
generatedCipher.init(Cipher.ENCRYPT_MODE, generatedSecretKey);

byte[] messsageStringBytes = plainText.getBytes();
byte[] encryptedMessage = generatedCipher.doFinal(messsageStringBytes);

String encryptedMessageString = new String(encryptedMessage);

if (base64) {
    encryptedMessageString = Base64.getEncoder().encodeToString(encryptedMessageString.getBytes("utf-8"));
}

return encryptedMessageString;

解密函数代码:

boolean dbase64 = true;
dkey = "thisiskey";
messageToDecrypt = "mñqè•ÀPŒ�øf\"ߦ\±õ¤ù'È9¢ëyT ÍQEÁ|;ëâÉ÷JWú"; // Message from above code

SecretKeyFactory MyKeyFactory = SecretKeyFactory.getInstance("DES");
byte[] dkeyBytes = dkey.getBytes();

DESKeySpec generatedKeySpec = new DESKeySpec(dkeyBytes);
SecretKey generatedSecretKey = MyKeyFactory.generateSecret(generatedKeySpec);

Cipher generatedCipher = Cipher.getInstance("DES");
generatedCipher.init(Cipher.DECRYPT_MODE, generatedSecretKey);

if (dbase64) {
    byte[] decodedBytes = Base64.getDecoder().decode(dencryptedText);
    dencryptedText = new String(decodedBytes, "utf-8");
}

byte[] messsageStringBytes = dencryptedText.getBytes();
byte[] encryptedMessage = generatedCipher.doFinal(messsageStringBytes);

String decryptedMessageString = new String(encryptedMessage);

return decryptedMessageString;

共有1个答案

乌璞瑜
2023-03-14

“UTF-8加密消息”没有意义。密文是二进制的,而不是UTF-8。您需要将其放入字节[]中,而不是字符串中。

如果需要字符串,请使用Base64或十六进制编码。

即使在base64编码中,我也无法正确解密。

String encryptedMessageString = new String(encryptedMessage);

if (base64) {
  encryptedMessageString =  Base64.getEncoder().encodeToString(encryptedMessageString.getBytes("utf-8"));
}
 类似资料:
  • 本文向大家介绍python DES加密与解密及hex输出和bs64格式输出的实现代码,包括了python DES加密与解密及hex输出和bs64格式输出的实现代码的使用技巧和注意事项,需要的朋友参考一下 pythonDES加密与解密以及hex输出和bs64格式输出 具体代码如下所示: 总结 到此这篇关于python DES加密与解密及hex输出和bs64格式输出的实现代码的文章就介绍到这了,更多相

  • 这段代码的目的是在最终用户的机器上生成一个CSR,然后我对它进行签名,并用机器的MAC地址(和salt)对它进行加密,这样程序就只能在授权的机器上运行,而且只有授权的机器才能访问我的PostgreSql数据库。 建议?

  • 我正在尽我最大的努力创建一个程序,它将生成一个私有/公共RSA密钥集,并使用它发送消息,从端到端是安全的。我正在使用RSA私钥/公钥对来安全地传输AES密钥,该密钥将用于发送消息。 当我使用1024位密钥对时,加密的会话密钥是128字节。但在试图用RSA私钥解密时,它抱怨说只能解密117字节或更少的字节。 当我使用2048位的密钥对时,加密的会话密钥是256字节(但必须是245或更少),等等。 结

  • 默认我们的数据传输都是不经过加密的,要加密传输的话得用上HTTPS协议。easyopen在1.4.0版本开始提供了数据加密传输,不需要HTTPS协议。 easyopen基于公私钥+AES加密传输,交互流程如下: 0. 事先把公钥放在客户端,私钥放在服务端 1. 客户端生成一个随机码randomKey 2. 将randomKey通过公钥RSA加密str = rsa_encode(randomKey,

  • 我正在考虑使用ChaCha20-Poly1305来加密/解密密码(我需要加密/解密不能只哈希)。但是,要使用此算法,我们需要使用密钥。然而,这是一个问题,因为我正在他们的设备上加密/解密用户的密码,所以在我的数据库中,我只存储他们加密的密码。 问题是,如果用户从他们的手机上卸载我的应用程序或换成新手机,我需要相同的密钥才能再次解密用户的密码。 我的问题是:如何安全地传输和存储这个密钥? 另外,如果