static void Main(string[] args) { var preSecret = "1234567890"; //for (int i = 0; i < 10; i++) //{ // Console.WriteLine(HashedOneTimePassword.GeneratePassword(preSecret, i)); //} //long[] seconds = new long[] { 59, 1111111109, 1111111111, 1234567890, 2000000000, 20000000000 }; //foreach (var second in seconds) //{ // Console.WriteLine(TimeBasedOneTimePassword.GetPassword(preSecret, TimeBasedOneTimePassword.UNIX_EPOCH + TimeSpan.FromSeconds(second), TimeBasedOneTimePassword.UNIX_EPOCH, 30, 8)); //} var enc = new Base32Encoder(); while (true) { // feed this into GA to create a new Application string secret = enc.Encode(Encoding.ASCII.GetBytes(preSecret)); Console.WriteLine(secret); //this will get the preSecret key back ... var preSecretBack = Encoding.UTF8.GetString ( enc.Decode(secret)); Console.WriteLine(preSecretBack); // this would be a VALID password right now Console.WriteLine("Valid pw: " + TimeBasedOneTimePassword.GetPassword(preSecret)); Console.WriteLine("Enter your password: "******"") { break; } // this will check the entered password (possibly from GA) ... if (TimeBasedOneTimePassword.IsValid(preSecret, password)) { Console.WriteLine("Success!"); } else { Console.WriteLine("ERROR!"); } } return; }
static void Main(string[] args) { for (int i = 0; i < 10; i++) { Console.WriteLine(HashedOneTimePassword.GeneratePassword("12345678901234567890", i)); } long[] seconds = new long[] { 59, 1111111109, 1111111111, 1234567890, 2000000000, 20000000000 }; foreach (var second in seconds) { Console.WriteLine(TimeBasedOneTimePassword.GetPassword("12345678901234567890", TimeBasedOneTimePassword.UNIX_EPOCH + TimeSpan.FromSeconds(second), TimeBasedOneTimePassword.UNIX_EPOCH, 30, 8)); } Base32Encoder enc = new Base32Encoder(); string secret = enc.Encode(Encoding.ASCII.GetBytes("1234567890")); Console.WriteLine(secret); Console.WriteLine("Enter your password: "******"1234567890", password)) { Console.WriteLine("Success!"); } else { Console.WriteLine("ERROR!"); } return; while (true) { Console.WriteLine(TimeBasedOneTimePassword.GetPassword("1234567890")); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10)); } }
public static OperationResult loadTokenKeyInformation(string tokenID, out string tokenKey) { OperationResult result = OperationResult.Error; tokenKey = null; TokenCryptoData tokenCryptoData2 = new TokensDAO().loadTokenCryptoData(tokenID); string masterKey = SF.Expand.SAF.Configuration.SAFConfiguration.readMasterKey(); byte[] tokenSeed = tokenCryptoData2.GetTokenSeed(masterKey); if (tokenSeed != null) { Base32Encoder enc = new Base32Encoder(); tokenKey = enc.Encode(tokenSeed); result = OperationResult.Success; } return result; }
public ActionResult ShowTwoFactorSecret() { string secret = TwoFactorProfile.CurrentUser.TwoFactorSecret; if (string.IsNullOrEmpty(secret)) { byte[] buffer = new byte[9]; using (RandomNumberGenerator rng = RNGCryptoServiceProvider.Create()) { rng.GetBytes(buffer); } // Generates a 10 character string of A-Z, a-z, 0-9 // Don't need to worry about any = padding from the // Base64 encoding, since our input buffer is divisible by 3 TwoFactorProfile.CurrentUser.TwoFactorSecret = Convert.ToBase64String(buffer).Substring(0, 10).Replace('/', '0').Replace('+', '1'); secret = TwoFactorProfile.CurrentUser.TwoFactorSecret; } var enc = new Base32Encoder().Encode(Encoding.ASCII.GetBytes(secret)); return View(new TwoFactorSecret { EncodedSecret = enc }); }
public static OperationResult TokensCreateNew(TokenTypeBaseParams tkTypeBaseParams, string masterKey, string vendorSerialNumber, string dataEntropy, out TokenCryptoData tokenCryptoData) { OperationResult result; try { byte[] data; byte[] data2; long movingFactor; if (OperationResult.Error == HOTPCryptoData.Generate(masterKey, null, tkTypeBaseParams, out data, out data2, out movingFactor)) { tokenCryptoData = new TokenCryptoData(null, null, default(CryptoData), default(TokenTypeBaseParams)); result = OperationResult.Error; } else { TokenCryptoData tokenCryptoData2 = new TokenCryptoData(null, vendorSerialNumber, new CryptoData(movingFactor, BaseFunctions.HexEncoder(data), BaseFunctions.HexEncoder(data2), ""), tkTypeBaseParams); tokenCryptoData2.ResetMovingFactor(HOTPCipherInitialize.createSequenceNumber()); /*--------------------------*/ byte[] tokenSeed = tokenCryptoData2.GetTokenSeed(masterKey); string x = Encoding.ASCII.GetString(tokenSeed); Base32Encoder enc = new Base32Encoder(); string y = enc.Encode(tokenSeed); /*--------------------------*/ if (tkTypeBaseParams.MovingFactorType == TokenMovingFactorType.TransactionAuthenticationNumber) { string value; if (OperationResult.Error == TokensBaseFunctions.tokenTANMatrixIntegrityCheck(tokenCryptoData2, tokenCryptoData2.GetTokenSeed(masterKey), (dataEntropy == null || dataEntropy.Length < 1) ? new byte[0] : BaseFunctions.convertStringToByteArray(dataEntropy), out value)) { tokenCryptoData = new TokenCryptoData(null, null, default(CryptoData), default(TokenTypeBaseParams)); result = OperationResult.Error; return result; } tokenCryptoData2.ResetSupportCryptoData(value); } tokenCryptoData = tokenCryptoData2; result = OperationResult.Success; } } catch { LOGGER.Write(LOGGER.LogCategory.ERROR, "SF.Expand.SAF.Core::TokensCreateNew[]", null); tokenCryptoData = new TokenCryptoData(null, null, default(CryptoData), default(TokenTypeBaseParams)); result = OperationResult.Error; } return result; }
public static byte[] ToBytes(string text) { Base32Encoder _encoder = new Base32Encoder(); byte[] result = null; try { result = _encoder.Decode(text); } catch (Exception ex) { throw ex; } return result; }
/* static string GetString( byte data) { string result = string.Empty; switch( data) { case 0: result = "A"; break; case 1: result = "B"; break; case 2: result = "C"; break; case 3: result = "D"; break; case 4: result = "E"; break; case 5: result = "F"; break; case 6: result = "G"; break; case 7: result = "H"; break; case 8: result = "I"; break; case 9: result = "J"; break; case 10: result = "K"; break; case 11: result = "L"; break; case 12: result = "M"; break; case 13: result = "N"; break; case 14: result = "O"; break; case 15: result = "P"; break; case 16: result = "Q"; break; case 17: result = "R"; break; case 18: result = "S"; break; case 19: result = "T"; break; case 20: result = "U"; break; case 21: result = "V"; break; case 22: result = "W"; break; case 23: result = "X"; break; case 24: result = "Y"; break; case 25: result = "Z"; break; case 26: result = "2"; break; case 27: result = "3"; break; case 28: result = "4"; break; case 29: result = "5"; break; case 30: result = "6"; break; case 31: result = "7"; break; } return result; } static byte[] Expand(byte[] data) { byte[] result = new byte[] {0, 0, 0, 0, 0, 0, 0, 0}; for (int idx = 0; idx < data.Length; idx++) { result[idx] = data[idx]; } return result; } static string GetString(byte[] data) { StringBuilder result = new StringBuilder(); // 5, 3+2, 5, 1+4, 4 + 1, 5, 2+3, 5 int base32StringLength = (int)Math.Ceiling((double)((data.Length * 8) / 5)); UInt64 dataNumber = BitConverter.ToUInt64(Expand(data), 0); byte character; character = BitConverter.GetBytes(dataNumber & 31)[0]; result.Append(GetString(character)); for (int idx = 1; idx < base32StringLength; idx++) { dataNumber = dataNumber >> 5; character = BitConverter.GetBytes(dataNumber & 31)[0]; result.Append(GetString(character)); } return result.ToString().Pad('=', 8); } public static string From(byte[] data) { StringBuilder result = new StringBuilder(); byte[] dataSegment; int oddLength = data.Length % 5; int wordsLength = data.Length - oddLength; int remainingDataLength = wordsLength;; for (int idx = 0; idx < wordsLength; idx += 5) { dataSegment = new byte[5]; Array.Copy(data, idx, dataSegment, 0, 5 ); result.Append(GetString(dataSegment)); } if (oddLength > 0) { dataSegment = new byte[oddLength]; Array.Copy(data, wordsLength, dataSegment, 0, oddLength); result.Append(GetString(dataSegment)); } return result.ToString(); } static byte ValueOf(char character) { byte value = 0; switch( character) { case 'A': value = 0; break; case 'B': value = 1; break; case 'C': value = 2; break; case 'D': value = 3; break; case 'E': value = 4; break; case 'F': value = 5; break; case 'G': value = 6; break; case 'H': value = 7; break; case 'I': value = 8; break; case 'J': value = 9; break; case 'K': value = 10; break; case 'L': value = 11; break; case 'M': value = 12; break; case 'N': value = 13; break; case 'O': value = 14; break; case 'P': value = 15; break; case 'Q': value = 16; break; case 'R': value = 17; break; case 'S': value = 18; break; case 'T': value = 19; break; case 'U': value = 20; break; case 'V': value = 21; break; case 'W': value = 22; break; case 'X': value = 23; break; case 'Y': value = 24; break; case 'Z': value = 25; break; case '2': value = 26; break; case '3': value = 27; break; case '4': value = 28; break; case '5': value = 29; break; case '6': value = 30; break; case '7': value = 31; break; default: throw new ArgumentException(string.Format("'{0}' is not valid Base 32 character.", character)); } return value; } static byte[] GetData(string word) { int firstPaddingPosition = word.IndexOf('='); int wordLength = firstPaddingPosition > 0? firstPaddingPosition : word.Length; int resultLength = (int)Math.Ceiling((double)(( wordLength * 5) / 8)); UInt64 dataNumber = 0; dataNumber = ValueOf(word[0]); for (int idx = 1; idx < wordLength; idx++) { dataNumber = dataNumber << 5; dataNumber |= word[idx]; } byte[] result = new byte[resultLength]; byte[] dataNumberBytes = BitConverter.GetBytes(dataNumber); Array.Copy(dataNumberBytes, 0, result, 0, result.Length); return result; } public static byte[] GetBytes(string base32String) { List<byte> result = new List<byte>(); for (int idx = 0; idx < base32String.Length; idx += 8) { result.AddRange(GetData(base32String.Substring(idx, 8))); } return result.ToArray(); } */ //[ThreadStatic] //static Base32Encoder _encoder = new Base32Encoder(); public static string From(byte[] data) { Base32Encoder _encoder = new Base32Encoder(); string result = string.Empty; try { result = _encoder.Encode(data); } catch (Exception ex) { throw ex; } return result; }
// <summary> // Fetch user TFA settings and save the values to the model // </summary> public void LoadTfaSettings() { // MySQL query Select book in the database const string result = "SELECT Secret, Tfa " + "FROM users " + "Where Id = ?"; using (var empConnection = DatabaseConnection.DatabaseConnect()) { using (var showresult = new MySqlCommand(result, empConnection)) { // Bind parameters showresult.Parameters.Add("Id", MySqlDbType.VarChar).Value = IdentityModel.CurrentUserId; try { DatabaseConnection.DatabaseOpen(empConnection); // Execute command using (var myDataReader = showresult.ExecuteReader(CommandBehavior.CloseConnection)) { while (myDataReader.Read()) { // Save the values TwoFactorCode = new Base32Encoder().Encode(Encoding.ASCII.GetBytes(myDataReader.GetString(0))); TwoFactorEnabled = Convert.ToInt32(myDataReader.GetValue(1)); } } } catch (MySqlException) { // MySqlException } finally { DatabaseConnection.DatabaseClose(empConnection); } } } }
private string convertToBase32(byte[] input) { string output; Base32Encoder base32 = new Base32Encoder(); output = base32.Encode(input); return output; }
public void WithBase32_ThenReturnText(string base32, string expected) { var result = new Base32Encoder().Decode(base32); Assert.That(result, Is.EqualTo(expected)); }
public void WhenUtf8StringIsNotNull_ThenReturnEncoded(string text, string expected) { var result = new Base32Encoder().Encode(text); Assert.That(result, Is.EqualTo(expected)); }