首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java中的AES加密和C#中的解密

AES(Advanced Encryption Standard)是一种对称加密算法,它在Java中可以用于加密数据,而在C#中可以用于解密数据。

AES加密算法是目前应用最广泛的加密算法之一,它具有高安全性、高效率和可靠性的特点。AES算法支持不同的密钥长度,包括128位、192位和256位。较长的密钥长度可以提供更高的安全性,但也会增加计算成本。

在Java中,可以使用javax.crypto包中的Cipher类来实现AES加密。首先,需要生成一个AES密钥,然后使用该密钥初始化Cipher对象,并指定加密模式和填充方式。接下来,可以使用Cipher的encrypt方法对数据进行加密。

以下是一个示例代码:

代码语言:java
复制
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;

public class AESEncryptionExample {

    public static void main(String[] args) throws Exception {
        String plaintext = "Hello, World!";
        String key = "0123456789abcdef"; // 16字节的密钥

        byte[] encrypted = encrypt(plaintext, key);
        System.out.println("加密后的数据:" + new String(encrypted, StandardCharsets.UTF_8));

        String decrypted = decrypt(encrypted, key);
        System.out.println("解密后的数据:" + decrypted);
    }

    public static byte[] encrypt(String plaintext, String key) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        return cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
    }

    public static String decrypt(byte[] ciphertext, String key) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decrypted = cipher.doFinal(ciphertext);
        return new String(decrypted, StandardCharsets.UTF_8);
    }
}

在C#中,可以使用System.Security.Cryptography命名空间中的Aes类来实现AES解密。首先,需要生成一个AES密钥,然后使用该密钥初始化Aes对象,并指定解密模式和填充方式。接下来,可以使用Aes的CreateDecryptor方法对数据进行解密。

以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.Security.Cryptography;
using System.Text;

class AESDecryptionExample
{
    static void Main()
    {
        byte[] ciphertext = Convert.FromBase64String("..."); // 加密后的数据
        string key = "0123456789abcdef"; // 16字节的密钥

        string decrypted = Decrypt(ciphertext, key);
        Console.WriteLine("解密后的数据:" + decrypted);
    }

    static string Decrypt(byte[] ciphertext, string key)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.Mode = CipherMode.ECB;
            aes.Padding = PaddingMode.PKCS7;

            ICryptoTransform decryptor = aes.CreateDecryptor();
            byte[] decrypted = decryptor.TransformFinalBlock(ciphertext, 0, ciphertext.Length);
            return Encoding.UTF8.GetString(decrypted);
        }
    }
}

AES加密和解密在实际应用中具有广泛的应用场景,例如保护敏感数据、加密通信、数字签名等。腾讯云提供了多个与AES加密相关的产品和服务,例如云加密机(KMS)、云HSM(Key Management Service)等,可以帮助用户更好地保护数据安全。

更多关于AES加密和解密的信息,可以参考腾讯云的文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

10分43秒

11_尚硅谷_SSM面试题_MyBatis中当实体类中的属性名和表中的字....avi

15分27秒

Java零基础-045-Java中的注释

6分43秒

Java中的异常处理你真的了解吗

1分24秒

Python中urllib和urllib2库的用法

16分22秒

09_尚硅谷_专题6:IDEA中的Project和Module

16分16秒

111-MySQL8.0和5.7中SQL执行流程的演示

13分20秒

53-尚硅谷-ThreadLocal中的get和set源码分析

13分29秒

Java教程 Mybatis 02 Mybatis解决的JDBC中的问题 学习猿地

14分25秒

062_第六章_Flink中的时间和窗口(二)_水位线(三)_水位线在代码中的生成(一)

8分48秒

063_第六章_Flink中的时间和窗口(二)_水位线(三)_水位线在代码中的生成(二)

33分30秒

Java零基础-299-多态在开发中的作用

9分18秒

125 - Java入门极速版 - 进阶语法 - 线程 - 线程中的进程

领券