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

在Java中使用对称密钥字节[]加密消息

曹奇文
2023-03-14

我想获取一段纯文本,一个字节[]形式的对称密钥(来自先前的计算)并输出密文。cipherText=加密(明文本,共享秘密)如何合并纯文本和共享秘密?

public static String encrypt(String plainText, byte[] sharedSecret){
        String cipherText = "";
        //combining the sharedSecret with the plainText
        return cipherText;
    }

共有1个答案

司马耘豪
2023-03-14

检查此代码是否为对称密钥加密。您可以重构以适应您的加密方法。

import java.security.AlgorithmParameters; 
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
public class SymmEncryption {
public static void main(String[] args) throws InvalidAlgorithmParameterException {
    try {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(256); // 56 is the keysize. Fixed for DES
        //Initialization Vector
        byte[] iv = "1234567812345678".getBytes();
        IvParameterSpec ivSpec = new IvParameterSpec(iv);
        SecretKey secretKey = keyGenerator.generateKey();
        System.out.println(secretKey.getFormat());
        Cipher desCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//algorithm/mode/padding
        //Electronic Codebook (ECB)
        System.out.format("Secret Key: %s--%s--%s%n", secretKey.getAlgorithm(), secretKey.getFormat(), secretKey.getEncoded());
        // Initialize the cipher for encryption
        desCipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
        // sensitive information
        byte[] text = "No body can see me".getBytes();
        System.out.println("Hex text: " + byteArrayToHex(text));
        System.out.println("Text [Byte Format] : " + text);
        System.out.println("Text : " + new String(text));
        // Encrypt the text
        byte[] textEncrypted = desCipher.doFinal(text);
        System.out.println("Text Encryted : " + textEncrypted);
        System.out.println("Hex Encrypted text: " + byteArrayToHex(textEncrypted));
        // Initialize the same cipher for decryption
        desCipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
        // Decrypt the text
        byte[] textDecrypted = desCipher.doFinal(textEncrypted);
        System.out.println("Text Decryted : " + new String(textDecrypted));
        System.out.println("Hex Decrypted text: " + byteArrayToHex(textDecrypted));
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    } catch (BadPaddingException e) {
        e.printStackTrace();
    }
}
static String byteArrayToHex(byte[] a) {
    StringBuilder sb = new StringBuilder();
    for (byte b : a)
        sb.append(String.format("%02x", b & 0xff));
    return sb.toString();
}
}
 类似资料:
  • MAC( M essage A uessntication C ode)算法是一种对称密钥加密技术,用于提供消息认证。 为了建立MAC过程,发送方和接收方共享对称密钥K. 实质上,MAC是在基础消息上生成的加密校验和,它与消息一起发送以确保消息验证。 使用MAC进行身份验证的过程如下图所示 - 在Java中, javax.crypto包的Mac类提供了消息认证代码的功能。 按照以下步骤使用此类创建

  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 问题内容: 我需要用openssl生成的和密钥替换从Unix到Java代码的加密和解密步骤 我生成密钥 我在Unix中使用键(我需要在Java中执行) 这是我的尝试 但它不起作用,PKCS8EncodedKeySpec / X509EncodedKeySpec不正确…但是我不知道该放什么 问题答案: 我认为您在读取PEM文件时遇到问题。JPA不直接支持PEM格式。您有两种选择,要么将它们转换为DE

  • 我有这样的情况,我使用OpenSSL生成了一个公钥/私钥对,供gdcmanon使用,遵循他们网站上列出的说明。具体地说,我使用以下命令为gdcmanon生成密钥 然后,我就能够按照他们的指示,加密一个文件,使用 这在c.init(cipher.decrypt_mode,key)行失败; 我已经为Java6安装了JCE(我正在使用)。我不知道我做错了什么。谁能给我指出正确的方向吗。 谢谢

  • 我得到了两个加密的文件。enc和加密的_数据。csv。附件。我需要使用我的私钥来解密加密的密钥。enc获取对称密钥,然后使用该对称密钥解密加密的_数据。csv。enc文件。 在终端上,以下命令完成作业: 我的目标是执行两个命令的java等效。我成功地解密了第一个文件并检索了对称密钥。 现在我无法使用对称密钥解密csv文件。我的问题出现在

  • 主要内容:1.对称加密,2.非对称加密,3.混合加密,4.常见的摘要算法1.对称加密 AES,密钥长度有128/256/192。高级加密标准,是下一代的加密算法标准,速度快,安全级别高; DES:密钥为56, 数据加密标准,速度较快,适用于加密大量数据的场合。 3DES: 密钥为168.是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。 IDES: 密钥为128 SM1: 密钥为128 SM4: 密钥为128 RC4, RC5, RC6 DESX 两边用