public string login() { objUserData = new UserData(); CommonAPI.LoginInfo = objUserData; objUserData.uuid = Guid.NewGuid().ToString(); objUserData.WorkStationSerial = Tools.generateWorkStationGUID(); SymmetricCryptography symmetricCryptography_0; //加密器 symmetricCryptography_0 = new SymmetricCryptography(SymmetricProvider.Rijndael); byte[] key = null; byte[] iV = null; //系统默认是根据uuid 生成一个算法key的,或者简单理解为uuid就是加密和解密的密码 CommonAPI.GenerateKey(objUserData.uuid, ref key, ref iV, SymmetricProvider.Rijndael); symmetricCryptography_0.Key = key; symmetricCryptography_0.IV = iV; objUserData.UserId = symmetricCryptography_0.EncryptString(m_strUser); //demo objUserData.Password = symmetricCryptography_0.EncryptString(m_strPassword); //DEMO objUserData.AppServer = m_strServer; objUserData.LanguageID = "zh-CN"; objUserData.cSubID = "DP"; objUserData.operDate = m_strDate; objUserData.DataSource = m_strDataSource; Debugger.Log(0, null, UserDataTools.userData2String(objUserData)); var paras = new CommonParameters(); var loginHeader = new LoginedDataHead(); loginHeader.ChangePwd = false; loginHeader.KickOutWorkStation = false; loginHeader.NewPassword = symmetricCryptography_0.EncryptString(""); //DEMO paras.Para1 = "TARGET\\ENTERPRISEPORTAL.EXE"; paras.Para2 = true; paras.Para3 = loginHeader; try { credit.BFDispatch("Authenticate", objUserData, ref paras); if (!string.IsNullOrEmpty(paras.Para1)) { return(paras.Para1); } } catch (CustomError cEx) { //MessageBox.Show(cEx.Message); throw; } finally { } }
/// <summary>認証Serviceのテスト(秘密鍵暗号化方式)</summary> private void button1_Click(object sender, EventArgs e) { // SessionステートフルなWebサービス ServiceForAuth sfa = new ServiceForAuth(); sfa.CookieContainer = new CookieContainer(); sfa.Proxy = GlobalProxySelection.GetEmptyWebProxy(); //sfa.Proxy = WebProxy.GetDefaultProxy(); //sfa.Proxy.Credentials = new NetworkCredential("20228749", "*****"); // チャレンジ=秘密鍵 string challenge = sfa.GetChallenge(); // アカウントの暗号化 string encUid = SymmetricCryptography.EncryptString( this.textBox1.Text, challenge, EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider); string encPwd = SymmetricCryptography.EncryptString( this.textBox2.Text, challenge, EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider); // 認証チケットを取得 string authTicketBase64 = sfa.GetAuthTicket(encUid, encPwd); // 認証チケットを検証 string[] authTicket = sfa.ValidateAuthTicket(authTicketBase64); MessageBox.Show( "uid\t: " + authTicket[0] + "\r\n" + "pwd\t: " + authTicket[1] + "\r\n" + "time\t: " + authTicket[2] + "\r\n", "認証チケット", MessageBoxButtons.OK, MessageBoxIcon.Information); }
public string GetAuthTicket(string encUid, string encPwd) { try { // ユーザIDの復号化 string uid = SymmetricCryptography.DecryptString( encUid, (string)Session["challenge"], EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider); // パスワードの復号化 string pwd = SymmetricCryptography.DecryptString( encPwd, (string)Session["challenge"], EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider); // 認証する。 bool isAuthenticated = false; #region 認証処理のUOC // ★★ コンテキストの情報を使用するなどして // 認証処理をUOCする(必要に応じて)。 //// B層・D層呼出し //// 認証チェックとタイムスタンプの更新 //MyUserInfo userInfo =new MyUserInfo( // "未認証:" + uid, HttpContext.Current.Request.UserHostAddress); //BaseReturnValue returnValue = (BaseReturnValue)Latebind.InvokeMethod( // "xxxx", "yyyy", // FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, // new object[] { // new AuthParameterValue("-", "-", "zzzz", "",userInfo, pwd), // DbEnum.IsolationLevelEnum.User }); //// 認証されたか・されなかったか //isAuthenticated = !returnValue.ErrorFlag; isAuthenticated = true; #endregion if (isAuthenticated) { // 認証チケットを作成して暗号化する(DateTime.Nowにより可変に)。 string[] authTicket = { uid, pwd, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") }; return(SymmetricCryptography.EncryptString( CustomEncode.ToBase64String( BinarySerialize.ObjectToBytes(authTicket)), GetConfigParameter.GetConfigValue("private-key"), EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider)); } else { // 認証失敗 return(string.Empty); } } catch { // 認証失敗 return(string.Empty); } finally { // セッションの解放 Session.Abandon(); } }
/// <summary>秘密鍵・暗号化</summary> private void button1_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtSCSalt.Text)) { // ソルト無し if (this.rbnSCString.Checked) { // String this.txtSCCode.Text = SymmetricCryptography.EncryptString( this.txtSCString.Text, this.txtSCPassword.Text, (EnumSymmetricAlgorithm)cbxSCPV.SelectedValue); } else { // Bytes this.txtSCCode.Text = CustomEncode.ToHexString( SymmetricCryptography.EncryptBytes( CustomEncode.StringToByte(txtSCString.Text, CustomEncode.UTF_8), this.txtSCPassword.Text, (EnumSymmetricAlgorithm)cbxSCPV.SelectedValue)); } } else { // ソルト有り if (this.nudSCStretching.Value == 0) { // ストレッチング無し if (this.rbnSCString.Checked) { // String this.txtSCCode.Text = SymmetricCryptography.EncryptString( this.txtSCString.Text, this.txtSCPassword.Text, (EnumSymmetricAlgorithm)cbxSCPV.SelectedValue, CustomEncode.StringToByte(txtSCSalt.Text, CustomEncode.UTF_8)); } else { // Bytes this.txtSCCode.Text = CustomEncode.ToHexString( SymmetricCryptography.EncryptBytes( CustomEncode.StringToByte(txtSCString.Text, CustomEncode.UTF_8), this.txtSCPassword.Text, (EnumSymmetricAlgorithm)cbxSCPV.SelectedValue, CustomEncode.StringToByte(txtSCSalt.Text, CustomEncode.UTF_8))); } } else { // ストレッチング有り if (this.rbnSCString.Checked) { // String this.txtSCCode.Text = SymmetricCryptography.EncryptString( this.txtSCString.Text, this.txtSCPassword.Text, (EnumSymmetricAlgorithm)cbxSCPV.SelectedValue, CustomEncode.StringToByte(txtSCSalt.Text, CustomEncode.UTF_8), (int)this.nudSCStretching.Value); } else { // Bytes this.txtSCCode.Text = CustomEncode.ToHexString( SymmetricCryptography.EncryptBytes( CustomEncode.StringToByte(txtSCString.Text, CustomEncode.UTF_8), this.txtSCPassword.Text, (EnumSymmetricAlgorithm)cbxSCPV.SelectedValue, CustomEncode.StringToByte(txtSCSalt.Text, CustomEncode.UTF_8), (int)this.nudSCStretching.Value)); } } } }