C#密码加密对应在Java中的使用

C#密码加密对应在Java中的使用

C#代码

此处对于SKey进行了一个MD5加密,且只取8个字符,长度不为8会报错

public static string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.Default.GetBytes(Text);
            string nice = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8);
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            return ret.ToString();
        }

Java代码

IvParameterSpec iv = new IvParameterSpec(key.getBytes(“UTF-8”));中的key也需要长度为8。

	//加密
    public static String encryption(String str) {
        return toHexString(encrypt(str, key)).toUpperCase();
    }
    //解密
    public static String decrypt(String str) {
        return decrypt(str, key);
    }

    //解密数据
    private static String decrypt(String message, String key) {
        try {
            byte[] bytesrc = convertHexString(message);
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));

            cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);

            byte[] retByte = cipher.doFinal(bytesrc);
            return new String(retByte);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    //加密数据
    private static byte[] encrypt(String message, String key) {
        try {
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));

            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);

            return cipher.doFinal(message.getBytes("UTF-8"));
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    //将字符串转换为byte数组
    private static byte[] convertHexString(String ss) {
        byte digest[] = new byte[ss.length() / 2];
        for (int i = 0; i < digest.length; i++) {
            String byteString = ss.substring(2 * i, 2 * i + 2);
            int byteValue = Integer.parseInt(byteString, 16);
            digest[i] = (byte) byteValue;
        }

        return digest;
    }

    //将byte数组转换为字符串
    private static String toHexString(byte b[]) {
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            String plainText = Integer.toHexString(0xff & b[i]);
            if (plainText.length() < 2)
                plainText = "0" + plainText;
            hexString.append(plainText);
        }

        return hexString.toString();
    }

附上MD5加密

	//将字符串转换为MD5字符串
    private static String getMD5str(String str) {
        byte[] digest = null;
        try {
            MessageDigest md5 = MessageDigest.getInstance("md5");
            digest = md5.digest(str.getBytes("utf-8"));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //16是表示转换为16进制数
        String md5str = new BigInteger(1, digest).toString(16);
        return md5str;
    }

调用

	public static void main(String[] args) throws Exception {
        String key = "zhifubao";
        String value = "zfb-20041208";
        //将文本进行转码
        //String encode = java.net.URLEncoder.encode(value, "utf-8").toLowerCase();
        String encode = value;
        System.out.println("加密数据:" + encode);

        String a = toHexString(encrypt(encode, key)).toUpperCase();
        System.out.println("加密后的数据为:" + a);

        String b = java.net.URLDecoder.decode(decrypt(a, key), "utf-8");
        System.out.println("解密后的数据:" + b);

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#Java ,可以使用相应的内置类库来实现 AES 加密。 在 C# ,可以使用 System.Security.Cryptography 命名空间下的 Aes 类来实现 AES 加密。以下是一个简单的加密示例: ```csharp using System; using System.IO; using System.Security.Cryptography; class AesExample { static void Main() { // 加密的密钥和 IV byte[] key = new byte[32]; byte[] iv = new byte[16]; // 随机生成密钥和 IV using (Aes aes = Aes.Create()) { aes.GenerateKey(); aes.GenerateIV(); key = aes.Key; iv = aes.IV; } string plaintext = "Hello, world!"; // 加密 byte[] ciphertext; using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv; ICryptoTransform encryptor = aes.CreateEncryptor(); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) { using (StreamWriter sw = new StreamWriter(cs)) { sw.Write(plaintext); } ciphertext = ms.ToArray(); } } } Console.WriteLine(Convert.ToBase64String(ciphertext)); } } ``` 在 Java ,可以使用 javax.crypto 包下的 Cipher 类来实现 AES 加密。以下是一个简单的加密示例: ```java import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class AesExample { public static void main(String[] args) throws Exception { // 加密的密钥和 IV byte[] key = new byte[32]; byte[] iv = new byte[16]; // 随机生成密钥和 IV SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(iv); String plaintext = "Hello, world!"; // 加密 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); System.out.println(Base64.getEncoder().encodeToString(ciphertext)); } } ``` 需要注意的是,在实际使用,需要使用安全的随机数生成器来生成密钥和 IV。此外,还需要考虑密钥管理和密钥交换等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值