/// <summary> /// mac值计算 /// </summary> /// <param name="preMsg"></param> /// <returns></returns> private string CalculateMac(byte[] preMsg) { StringBuilder mac = new StringBuilder(); mac.Append(BitConverter.ToString(preMsg.GetSubArray(13, preMsg.Length - 21)).Replace("-", "")); return(IEncry.CalculateMAC(mac)); }
/// <summary> /// 签到 /// </summary> /// <returns></returns> public bool Sign() { ServiceUtil.PayClient.Open(); SignResponseModel responseModel = ServiceUtil.PayClient.Sign(new VisualSelfServiceEquipment { TerminalNo = Settings.TerminalNo }); ServiceUtil.PayClient.Close(); if (responseModel.ResponseCode != "00") { return(false); } string key = responseModel.Content; StringBuilder sbWorkKey = new StringBuilder(); bool result = false; switch (_creditCardPayType) { case CreditCardPayType.AllInPay: #region 通联验证逻辑 sbWorkKey.Append(key.Substring(6, 32)); StringBuilder sbMak = new StringBuilder(); sbMak.Append(key.Substring(46, 16)); StringBuilder sbTrk = new StringBuilder(); sbTrk.Append(key.Substring(86, 32)); IEncry.LoadWorkKeySign(sbWorkKey, sbMak, sbTrk); result = IEncry.CheckPIN(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(38, 8) && IEncry.CheckMAK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(78, 8) && IEncry.CheckTRK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(118, 8); #endregion break; case CreditCardPayType.ChinaUnionPay: #region 银联加密 sbWorkKey.Append(key.Substring(4, 32)); sbMak = new StringBuilder(); sbMak.Append(key.Substring(44, 16)); IEncry.LoadWorkKeySign(sbWorkKey, sbMak); result = IEncry.CheckPIN(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(36, 8) && IEncry.CheckMAK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(76, 8); #endregion break; default: break; } return(result); }
/// <summary> /// 根据读取的磁道数据的明文计算加密后的磁道信息 /// </summary> /// <param name="trackInfo">磁道信息</param> /// <returns></returns> private string CalculateTrackBlock(string trackInfo) { string trackStr = BitConverter.ToString(Utilities.TrackBlock(trackInfo)).Replace("-", ""); return(IEncry.CalculateTRK(new StringBuilder(trackStr))); }
/// <summary> /// 根据输入的明文密码和卡号计算加密后的PIN值 /// </summary> /// <param name="CardNo">卡号</param> /// <param name="pin">明文密码</param> /// <returns></returns> private string CalculatePinBlock(string CardNo, string pin) { string pinStr = BitConverter.ToString(Utilities.PinBlock(pin, CardNo.Substring(CardNo.Length - 13, 12))).Replace("-", ""); return(IEncry.CalculatePIN(new StringBuilder(pinStr))); }
/// <summary> /// 关闭密码键盘 /// </summary> public void CloseF10() { IEncry.Close(); }
/// <summary> /// 打开F10密码键盘 /// </summary> public void OpenF10() { //打开F10密码键盘 IEncry.Open(M100.CacheCard.CardNo); //F10.Open(M100.CacheCard.CardNo); }