第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

需要幫助將 C# 加密方法轉(zhuǎn)換為 Java

需要幫助將 C# 加密方法轉(zhuǎn)換為 Java

qq_花開(kāi)花謝_0 2022-10-26 15:55:29
我正在嘗試將現(xiàn)有的 C# 加密方法轉(zhuǎn)換為 Java,但遇到了如下障礙例如,當(dāng)我用 c# 加密一個(gè)基本字符串“12345”時(shí),我得到這個(gè)輸出 8ZQZEURctqP1PMmQxVtCcA==當(dāng)我用 java 加密相同的字符串時(shí),我得到了這個(gè) jkEZp2cfeGXVE/IxIW6X3g==private static string Encrypt(string plainText, string passPhrase, string saltValue, string hashAlgorithm, int passwordIterations,                        string initVector, int keySize){    try    {        byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);        byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);        byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);        PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);        byte[] keyBytes = password.GetBytes(keySize / 8);        RijndaelManaged symmetricKey = new RijndaelManaged { Mode = CipherMode.CBC };        ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);        MemoryStream memoryStream = new MemoryStream();        CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);        cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);        cryptoStream.FlushFinalBlock();        byte[] cipherTextBytes = memoryStream.ToArray();        memoryStream.Close();        cryptoStream.Close();        string cipherText = Convert.ToBase64String(cipherTextBytes);        return cipherText;    }    catch (Exception execp)    {        MessageBox.Show(string.Format("Exception in Encrypt function\r\nError: {0}", execp.Message));        return "";    }}下面是我轉(zhuǎn)換為 java 的內(nèi)容,但仍然沒(méi)有得到相同的加密輸入和輸出 - 我只是將“ProtectPassword”重命名為“Encrypt”,將“UnprotectPassword”重命名為“Decrypt”
查看完整描述

2 回答

?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

密文不同,因?yàn)?code>PasswordDeriveBytes在 C# 代碼和PBKDF2WithHmacSHA1Java 代碼中生成不同的密鑰:

  • PBKDF2WithHmacSHA1顧名思義,它是使用 SHA-1的 PBKDF 2的實(shí)現(xiàn)。

  • 的實(shí)現(xiàn)PasswordDeriveBytes基于 PBKDF 1,但增加了一些擴(kuò)展。

除了 C#-type 之外PasswordDeriveBytes,還有 C#-type Rfc2898DeriveBytes,它是 PBKDF2 的實(shí)現(xiàn),帶有 SHA-1,因此PBKDF2WithHmacSHA1與 Java 代碼中的對(duì)應(yīng)。

如果可能,Rfc2898DeriveBytes應(yīng)該在 C# 代碼中使用 代替PasswordDeriveBytes,例如參見(jiàn)此處此處的PBKDF2部分。然后兩個(gè)代碼返回相同的密文。

據(jù)我所知,沒(méi)有提供 C#-type 的 Java 實(shí)現(xiàn)的提供程序PasswordDeriveBytes。但是,Internet 上有功能相同的 Java 實(shí)現(xiàn),例如這里。如果 Java 代碼使用這樣的實(shí)現(xiàn)而不是PBKDF2WithHmacSHA1,則兩個(gè)代碼都返回相同的密文。但正如已經(jīng)提到的,這應(yīng)該是第二選擇。


查看完整回答
反對(duì) 回復(fù) 2022-10-26
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

正如下面所承諾的那樣是解決方案 - 再次感謝您的支持


public static class Encryption

{

    public static string Encrypt(string text)

    {

        var thePassword = "%cFRm*F)N9Rq[6#5";

        byte[] IV = Encoding.UTF8.GetBytes("7!,V5u]Bu>q>7zY'");


        var md5 = new MD5CryptoServiceProvider();

        var password = md5.ComputeHash(Encoding.ASCII.GetBytes(thePassword));

        var cipher = new RijndaelManaged();            

        var encryptor = cipher.CreateEncryptor(password, IV);


        var buffer = Encoding.ASCII.GetBytes(text);

        return Convert.ToBase64String(encryptor.TransformFinalBlock(buffer, 0, buffer.Length));

    }


    public static string Decrypt(string text)

    {

        var thePassword = "%cFRm*F)N9Rq[6#5";

        byte[] IV = Encoding.UTF8.GetBytes("7!,V5u]Bu>q>7zY'");


        var md5 = new MD5CryptoServiceProvider();

        var password = md5.ComputeHash(Encoding.ASCII.GetBytes(thePassword));

        var cipher = new RijndaelManaged();

        var decryptor = cipher.CreateDecryptor(password, IV);


        byte[] input = Convert.FromBase64String(text);

        var newClearData = decryptor.TransformFinalBlock(input, 0, input.Length);

        return Encoding.ASCII.GetString(newClearData);

    }

}

和java等價(jià)物


public class Encryption {


    public static String Encrypt(String str)

    {

        try 

        {

            String thePassword = "%cFRm*F)N9Rq[6#5";

            byte[] encryptedData;

            byte[] IV = "7!,V5u]Bu>q>7zY'".getBytes();


            MessageDigest digest = MessageDigest.getInstance("MD5");            

            SecretKeySpec password = new SecretKeySpec(digest.digest(thePassword.getBytes()), "AES");


            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

            IvParameterSpec IVParamSpec = new IvParameterSpec(IV);

            cipher.init(Cipher.ENCRYPT_MODE, password, IVParamSpec);

            encryptedData = cipher.doFinal(str.getBytes());


            return DatatypeConverter.printBase64Binary(encryptedData);

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }   


    public static String Decrypt(String str)

    {

        try 

        {

            String thePassword = "%cFRm*F)N9Rq[6#5";

            byte[] encryptedData = DatatypeConverter.parseBase64Binary(str); 

            byte[] IV = "7!,V5u]Bu>q>7zY'".getBytes();


            MessageDigest digest = MessageDigest.getInstance("MD5");            

            SecretKeySpec password = new SecretKeySpec(digest.digest(thePassword.getBytes()), "AES");


            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

            IvParameterSpec IVParamSpec = new IvParameterSpec(IV);

            cipher.init(Cipher.DECRYPT_MODE, password, IVParamSpec);


            byte[] decryptedVal = cipher.doFinal(encryptedData);

            return new String(decryptedVal); 

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-10-26
  • 2 回答
  • 0 關(guān)注
  • 138 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)