2016-08-30 8 views
1
public string EncryptPwd(String strString) 
     { 
      int intAscii; 
      string strEncryPwd = ""; 
      for (int intIndex = 0; intIndex < strString.ToString().Length; intIndex++) 
      { 
       intAscii = (int)char.Parse(strString.ToString().Substring(intIndex, 1)); 
       intAscii = intAscii + 5; 
       strEncryPwd += (char)intAscii; 
      } 
      return strEncryPwd; 
     } 

これは私のコードです。正しいかどうかを教えてください。asp.netの文字列を暗号化する方法C#

+0

カスタム暗号化の代わりに 'MD5'、' AES'または他の標準暗号化を使用することをお勧めします。 –

+0

http://securitydriven.net/inferno/#Encryptionを使用してください。これには、ナゲットパッケージが含まれています。 Infernoはデータを適切に保護するためのすべての適切な処理を行いますが、ほとんどの例では、弱く欠陥のある保護設定が示されています。 –

答えて

1

これを解読する方法はありますか?私は同意する

public static string DecryptString(string Message, string Passphrase) 
     { 
      byte[] Results; 
      System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); 

      MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); 
      byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase)); 

      TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); 

      TDESAlgorithm.Key = TDESKey; 
      TDESAlgorithm.Mode = CipherMode.ECB; 
      TDESAlgorithm.Padding = PaddingMode.PKCS7; 

      byte[] DataToDecrypt = Convert.FromBase64String(Message); 
      // Step 5. Bat dau giai ma chuoi 
      try 
      { 
       ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor(); 
       Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); 
      } 
      catch (Exception) { Results = DataToDecrypt; } 
      finally 
      {     
       TDESAlgorithm.Clear(); 
       HashProvider.Clear(); 
      } 

      return UTF8.GetString(Results); 
     } 
+0

おかげで私はやった。 –

1

上の別の答えがあります前のすべての回答(特にshare pvv)であるが、y本当に(シーザー暗号は非常に弱い暗号化されており、製造工程で使用されるべきではない)Caesar Cipherを望んでなかったし、これは学習運動であれば、その後、ここではいくつかのコード

string strString = "abcdefghijklmnopqrstuvwxyz"; 
string enc = String.Join("", strString.ToArray().Select(x =>(char)('a' + (x-'a'+5)%26))); 
Console.WriteLine(enc); 

またはループのために使用されるOUあなたのように

string strEncryPwd = ""; 
for (int index = 0; index < strString.ToString().Length; index++) 
{ 
     int plainChar = strString[index]; 
     int encrypted = 'a' + (plainChar - 'a' + 5) % 26; 
     strEncryPwd += (char)encrypted; 
    } 
     Console.WriteLine(strEncryPwd); 
+0

3DESを使用しないでください! –

2

:パスワード付き

public static string EncryptString(string Message, string Passphrase) 
     { 
      byte[] Results; 
      System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); 

      MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); 
      byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));   
      TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();   
      TDESAlgorithm.Key = TDESKey; 
      TDESAlgorithm.Mode = CipherMode.ECB; 
      TDESAlgorithm.Padding = PaddingMode.PKCS7;   
      byte[] DataToEncrypt = UTF8.GetBytes(Message);  
      try 
      { 
       ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor(); 
       Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length); 
      } 
      finally 
      { 
       TDESAlgorithm.Clear(); 
       HashProvider.Clear(); 
      }   
      return Convert.ToBase64String(Results); 
     } 

と復号化文字列:パスワード付き

暗号化文字列:ここでは、このコードを使用することができますSO

private static readonly UTF8Encoding Encoder = new UTF8Encoding(); 

public static string Encrypt(string unencrypted) 
{ 
    if (string.IsNullOrEmpty(unencrypted)) 
     return string.Empty; 

    try 
    { 
     var encryptedBytes = MachineKey.Protect(Encoder.GetBytes(unencrypted)); 

     if (encryptedBytes != null && encryptedBytes.Length > 0) 
      return HttpServerUtility.UrlTokenEncode(encryptedBytes);  
    } 
    catch (Exception) 
    { 
     return string.Empty; 
    } 

    return string.Empty; 
} 

public static string Decrypt(string encrypted) 
{ 
    if (string.IsNullOrEmpty(encrypted)) 
     return string.Empty; 

    try 
    { 
     var bytes = HttpServerUtility.UrlTokenDecode(encrypted); 
     if (bytes != null && bytes.Length > 0) 
     { 
      var decryptedBytes = MachineKey.Unprotect(bytes); 
      if(decryptedBytes != null && decryptedBytes.Length > 0) 
       return Encoder.GetString(decryptedBytes); 
     } 

    } 
    catch (Exception) 
    { 
     return string.Empty; 
    } 

    return string.Empty; 
} 
関連する問題