/// <summary> /// Encrypts a string of text into a Base64 string using the <see cref="RijndaelManaged" /> algorithm. /// </summary> /// <param name="input">The string to encrypt.</param> public string EncryptString(string input) { if (string.IsNullOrEmpty(input)) { return(input); } var data = Encoding.UTF8.GetBytes(input); var key = EncryptionUtils.GenerateKey(Password, Salt.ToByteArray(), KeyIterations); var seedBytes = Seed.ToByteArray(); var result = EncryptionUtils.Encrypt(data, key, seedBytes).EncryptedData; return(Convert.ToBase64String(result)); }
// Client Constructor, username not needed, salt not generated by client public SRP6(byte[] identityHash, String modulus_N, int generator_g, String salt, string initialVector = "OFRna73m*aze01xY") { InitialVector = initialVector; Modulus = BigIntegerExtension.Create(modulus_N, 16); Generator = BigIntegerExtension.Create("" + generator_g, 10); Multiplier = BigIntegerExtension.Create("3", 10); Salt = BigIntegerExtension.Create(salt, 16); // Client-side variables PrivateKey = BigIntegerExtension.GeneratePseudoPrime(128, 100, new Random()); // g^a (mod N) PublicKey = this.generator_g.modPow(privateKey, this.modulus_N); // Server-side variables SaltedIdentityHash = bytesToBig(Sha1Hash(Salt.ToByteArray(), identityHash)); }
/// <summary> /// Decrypts the binary data of a Base64 string back into the original text using the <see /// cref="RijndaelManaged" /> algorithm. /// </summary> /// <param name="input">The string to decrypt.</param> public string DecryptString(string input) { if (string.IsNullOrEmpty(input)) { return(input); } var encryptedData = Convert.FromBase64String(input); var key = EncryptionUtils.GenerateKey(Password, Salt.ToByteArray(), KeyIterations); var seedBytes = Seed.ToByteArray(); var decryptedData = EncryptionUtils.Decrypt(encryptedData, key, seedBytes); using (var ms = new MemoryStream(decryptedData)) using (var sr = new StreamReader(ms)) { return(sr.ReadToEnd()); } }
public void Write(Stream stream) { using (var writer = new BinaryWriter(stream, Encoding.UTF8, true)) { writer.Write((byte)AuthRequestOpcode.LogonChallenge); writer.Write((byte)0); writer.Write((byte)Result); if (Result == AuthResponse.Success) { writer.Write(B.ToByteArray(32)); writer.Write(GLength); writer.Write(G); writer.Write(NLength); writer.Write(N.ToByteArray(NLength)); writer.Write(Salt.ToByteArray(32)); writer.Write(RandomNumber.ToByteArray(16)); writer.Write(SecurityFlags); } } }