private void frmAccountIssuer_Load(object sender, EventArgs e) { accountCode = Membership.GeneratePassword(16, 6); var tfa = new TwoFactorAuthenticator(); info = tfa.GenerateSetupCode("CAESAR", accountCode, 300, 300); }
/// <summary> /// 生成用户可扫描的谷歌认证初始码 Generate a setup code for a Google Authenticator user to scan (with issuer ID). /// </summary> /// <param name="issuer">发行者ID Issuer ID (the name of the system, i.e. 'MyApp')</param> /// <param name="accountTitleNoSpaces">帐户名 Account Title (no spaces)</param> /// <param name="accountSecretKey">共享密钥 Account Secret Key</param> /// <param name="qrCodeWidth">二维码宽度 QR Code Width</param> /// <param name="qrCodeHeight">二维码高度 QR Code Height</param> /// <param name="useHttps">是否使用HTTPS Use HTTPS instead of HTTP</param> /// <returns>SetupCode object</returns> public SetupCode GenerateSetupCode(string issuer, string accountTitleNoSpaces, string accountSecretKey, int qrCodeWidth, int qrCodeHeight, bool useHttps) { if (string.IsNullOrEmpty(accountTitleNoSpaces)) { throw new NullReferenceException("Account Title is null"); } accountTitleNoSpaces = accountTitleNoSpaces.Replace(" ", ""); SetupCode sC = new SetupCode(); sC.Account = accountTitleNoSpaces; sC.AccountSecretKey = accountSecretKey; //base32加密 string encodedSecretKey = EncodeAccountSecretKey(accountSecretKey); sC.ManualEntryKey = encodedSecretKey; string provisionUrl = null; if (string.IsNullOrEmpty(issuer)) { provisionUrl = String.Format("otpauth://totp/{0}?secret={1}", accountTitleNoSpaces, encodedSecretKey); } else { provisionUrl = String.Format("otpauth://totp/{0}?secret={1}&issuer={2}", accountTitleNoSpaces, encodedSecretKey, UrlEncode(issuer)); } sC.QrCodeSetupUrl = provisionUrl; provisionUrl = UrlEncode(provisionUrl); string protocol = useHttps ? "https" : "http"; string url = String.Format("{0}://chart.googleapis.com/chart?cht=qr&chs={1}x{2}&chl={3}", protocol, qrCodeWidth, qrCodeHeight, provisionUrl); sC.QrCodeSetupImageUrl = url; return(sC); }
/// <summary> /// Generate a setup code for a Google Authenticator user to scan (with issuer ID). /// </summary> /// <param name="issuer">Issuer ID (the name of the system, i.e. 'MyApp')</param> /// <param name="accountTitleNoSpaces">Account Title (no spaces)</param> /// <param name="accountSecretKey">Account Secret Key</param> /// <param name="qrCodeWidth">QR Code Width</param> /// <param name="qrCodeHeight">QR Code Height</param> /// <param name="useHttps">Use HTTPS instead of HTTP</param> /// <returns>SetupCode object</returns> public SetupCode GenerateSetupCode(string issuer, string accountTitleNoSpaces, string accountSecretKey, int qrCodeWidth, int qrCodeHeight, bool useHttps) { if (accountTitleNoSpaces == null) { throw new NullReferenceException("Account Title is null"); } accountTitleNoSpaces = accountTitleNoSpaces.Replace(" ", ""); SetupCode sC = new SetupCode(); sC.Account = accountTitleNoSpaces; sC.AccountSecretKey = accountSecretKey; string encodedSecretKey = EncodeAccountSecretKey(accountSecretKey); sC.ManualEntryKey = encodedSecretKey; string provisionUrl = null; if (string.IsNullOrEmpty(issuer)) { provisionUrl = UrlEncode(String.Format("otpauth://totp/{0}?secret={1}", accountTitleNoSpaces, encodedSecretKey)); } else { provisionUrl = UrlEncode(String.Format("otpauth://totp/{0}?secret={1}&issuer={2}", accountTitleNoSpaces, encodedSecretKey, UrlEncode(issuer))); } string protocol = useHttps ? "https" : "http"; string url = String.Format("{0}://chart.googleapis.com/chart?cht=qr&chs={1}x{2}&chl={3}", protocol, qrCodeWidth, qrCodeHeight, provisionUrl); sC.QrCodeSetupImageUrl = url; return sC; }