zoukankan      html  css  js  c++  java
  • silverlight字符串加密之二

    public static class Cryptography
        {

            /// <summary>
            /// Incrypt the input using password provided
            /// </summary>
            /// <param name="input">Input string to encrypt</param>
            /// <param name="password">Password to use</param>
            /// <returns>Encrypted string</returns>
            public static string Encrypt(string input, string password)
            {

                string data = input;
                byte[] utfdata = UTF8Encoding.UTF8.GetBytes(data);
                byte[] saltBytes = UTF8Encoding.UTF8.GetBytes(password);

                // Our symmetric encryption algorithm
                AesManaged aes = new AesManaged();

                // We're using the PBKDF2 standard for password-based key generation
                Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(password, saltBytes);

                // Setting our parameters
                aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
                aes.KeySize = aes.LegalKeySizes[0].MaxSize;
                aes.Key = rfc.GetBytes(aes.KeySize / 8);
                aes.IV = rfc.GetBytes(aes.BlockSize / 8);

                // Encryption
                ICryptoTransform encryptTransf = aes.CreateEncryptor();

                // Output stream, can be also a FileStream
                MemoryStream encryptStream = new MemoryStream();
                CryptoStream encryptor = new CryptoStream(encryptStream, encryptTransf, CryptoStreamMode.Write);

                encryptor.Write(utfdata, 0, utfdata.Length);
                encryptor.Flush();
                encryptor.Close();

                byte[] encryptBytes = encryptStream.ToArray();
                string encryptedString = Convert.ToBase64String(encryptBytes);

                return encryptedString;
            }

            /// <summary>
            /// Decrypt string using password provided
            /// </summary>
            /// <param name="base64Input">Input to decrypt</param>
            /// <param name="password">Password to use</param>
            /// <returns>Decrypted string</returns>
            public static string Decrypt(string base64Input, string password)
            {

                byte[] encryptBytes = Convert.FromBase64String(base64Input);
                byte[] saltBytes = Encoding.UTF8.GetBytes(password);

                // Our symmetric encryption algorithm
                AesManaged aes = new AesManaged();

                // We're using the PBKDF2 standard for password-based key generation
                Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(password, saltBytes);

                // Setting our parameters
                aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
                aes.KeySize = aes.LegalKeySizes[0].MaxSize;
                aes.Key = rfc.GetBytes(aes.KeySize / 8);
                aes.IV = rfc.GetBytes(aes.BlockSize / 8);

                // Now, decryption
                ICryptoTransform decryptTrans = aes.CreateDecryptor();

                // Output stream, can be also a FileStream
                MemoryStream decryptStream = new MemoryStream();
                CryptoStream decryptor = new CryptoStream(decryptStream, decryptTrans, CryptoStreamMode.Write);

                decryptor.Write(encryptBytes, 0, encryptBytes.Length);
                decryptor.Flush();
                decryptor.Close();

                byte[] decryptBytes = decryptStream.ToArray();
                string decryptedString = UTF8Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length);
                return decryptedString;
            }
        }

  • 相关阅读:
    Android内存优化5 了解java GC 垃圾回收机制3
    一起刑事案件法庭辩护 z
    辩护技巧总结——律师在刑事辩护中应注意的几个问题 z
    证据对抗、证据链标准 z
    里德九步审讯法 z
    WCF服务在高并发情况下报目标积极拒绝的异常处理 z
    C#EasyHook例子C# Hook 指定进程C#注入指定进程 z
    玄机论坛Socket类库源码 当前版本 2.6.3 更新日期:10-09/2015 z
    庭审全程文字实录 z
    庭审精彩语录整理 z
  • 原文地址:https://www.cnblogs.com/jacle169/p/2810095.html
Copyright © 2011-2022 走看看