Răsfoiți Sursa

!10837 对不同类型的数据进行屏蔽
Merge pull request !10837 from 80174847/oilyang_fixed_everything

杨诗友80174847 2 luni în urmă
părinte
comite
e4d40241ca

+ 67 - 0
Module/include/CommEntityUtil.hpp

@@ -738,6 +738,73 @@ static std::wstring S2W(const std::string str)
 	return std::wstring();
 }
 
+enum DataTypeToMask
+{
+	DataMask_UNKNOWN,
+	DataMask_IDCard,	/*居民身份证*/
+	DataMask_HKMOTWPermit,	/*港澳台居住证*/
+	DataMask_HKMOPermit,	/*港澳往来内地通行证*/
+	DataMask_TWPass,	/*台胞证*/
+	DataMask_ForeignerPR,	/*外国人永久居留证*/
+	DataMask_Passport,	/*外国人护照*/
+	DataMask_CardAccount,	/*卡号*/
+};
+//to mask data
+//if data is null or empty or length of data is short than 3, break ;
+//return the first one and the last two characters by default
+static CSimpleStringA DataMask(DataTypeToMask eDataType, CSimpleStringA data)
+{
+	if (data.IsNullOrEmpty())
+	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("data is null or empty");
+		return "";
+	}
+	else if (data.GetLength() < 3)
+	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("data length is %d, too short");
+		return "";
+	}
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("data type is %d, length is %d", eDataType, data.GetLength());
+	switch (eDataType)
+	{
+	case DataMask_IDCard:
+	case DataMask_HKMOTWPermit:
+	case DataMask_ForeignerPR:
+		if (data.GetLength() < 7)
+		{
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("data length is %d", data.GetLength());
+			break;
+		}
+		return CSimpleStringA::Format("%s****%s", data.SubString(0, 6).GetData(), data.SubString(data.GetLength() - 1, 1).GetData());
+		break;
+	case DataMask_HKMOPermit:
+		if (data.GetLength() < 5)
+		{
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("data length is %d", data.GetLength());
+			break;
+		}
+		return CSimpleStringA::Format("%s****%s", data.SubString(0, 1).GetData(), data.SubString(data.GetLength() - 4, 4).GetData());
+		break;
+	case DataMask_CardAccount:
+		if (data.GetLength() < 5)
+		{
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("data length is %d", data.GetLength());
+			break;
+		}
+		if (data.GetLength() < 16)
+			return CSimpleStringA::Format("%s**%s", data.SubString(0, 2).GetData(), data.SubString(data.GetLength() - 2, 2).GetData());
+		else
+			return CSimpleStringA::Format("%s****%s", data.SubString(0, 4).GetData(), data.SubString(data.GetLength() - 4, 4).GetData());
+		break;
+	case DataMask_TWPass:
+	case DataMask_Passport:
+	case DataMask_UNKNOWN:
+	default:
+		break;
+	}
+	return CSimpleStringA::Format("%s****%s", data.SubString(0, 1).GetData(), data.SubString(data.GetLength() - 2, 2).GetData());
+}
+
 } //namespace Util
 
 namespace Net{

+ 4 - 5
Module/mod_ContactlessCard/ContactlessFSM.cpp

@@ -8,7 +8,7 @@
 #include <map>
 
 #include "publicFunExport.h"
-
+#include "CommEntityUtil.hpp"
 #ifdef RVC_OS_WIN
 #else
 #include <dlfcn.h>
@@ -1054,9 +1054,8 @@ int CContactlessCardFSM::AcceptCard(SpReqAnsContext<ContactlessCardService_Inser
 
 				t2ICTrack2 = pICTrack2;
 				t2ICAccount = (char*)ddd;//oiltest
-				LogWarn(Severity_Low, Error_Succeed, ContactlessCard_UserErrorCode_ReadAccount, CSimpleStringA::Format("split pos:%d, card acount:%s,%s"
-					, pos, t2ICAccount.substr(0, 6).c_str(), t2ICAccount.substr(t2ICAccount.length() - 4, 4).c_str()));
 				ctx->Ans.ICData = ctx->Ans.t2Account = t2ICAccount.c_str();
+				LogWarn(Severity_Low, Error_Succeed, ContactlessCard_UserErrorCode_ReadAccount, SP::Module::Util::DataMask(SP::Module::Util::DataMask_CardAccount, t2ICAccount.c_str()));
 				ctx->Ans.ICType = 4;
 				ctx->Ans.status = 0;
 				delete[]ddd;
@@ -2037,8 +2036,8 @@ int CContactlessCardFSM::PreOnlineJS(SpReqAnsContext<ContactlessCardService_Read
 		}
 		delete[]ddd;
 
-		LogWarn(Severity_Low, Error_Succeed, ContactlessCard_UserErrorCode_ReadAccount, CSimpleStringA::Format("split pos:%d, card acount:%s,%s"
-			, pos, t2ICAccount.substr(0, 6).c_str(), t2ICAccount.substr(t2ICAccount.length() - 4, 4).c_str()));//读到的卡号
+		//oiltmp@20250728 what's the purpose of record this?
+		LogWarn(Severity_Low, Error_Succeed, ContactlessCard_UserErrorCode_ReadAccount, SP::Module::Util::DataMask(SP::Module::Util::DataMask_CardAccount, t2ICAccount.c_str()));//读到的卡号
 	}
 	delete[]pICTrack2;
 

+ 16 - 6
Module/mod_IDCertificate/IDCertFSM.cpp

@@ -1678,15 +1678,25 @@ void CIDCertFSM::CopyIDCerDataToCtx(IDCerInfoEx2 idInfoEx2, T& ctx)
 	//转换头像图片
 	GetPngBlobEx(ctx->Ans.headphoto, "zp");
 
+	CSimpleStringA csIDInfo, csIDLogInfo, csIDType;
 #ifdef RVC_OS_WIN
-	CSimpleStringA csIDLogInfo = CSimpleStringA::Format("IDNo:%s****%s"
-		, (const char*)CSimpleStringA(GetGBKString((UINT16*)idInfoEx2.idno.data)).SubString(0, 4)
-		, (const char*)CSimpleStringA(GetGBKString((UINT16*)idInfoEx2.idno.data)).SubString(CSimpleStringA(GetGBKString((UINT16*)idInfoEx2.idno.data)).GetLength() - 1, 1));
+	csIDInfo = CSimpleStringA::Format("%s", GetGBKString((UINT16*)idInfoEx2.idno.data));
+	csIDType = CSimpleStringA::Format("%s", GetGBKString((UINT16*)idInfoEx2.idType.data));
 #else
-	CSimpleStringA tIdcode = (char*)utf8Data->idno;
-	CSimpleStringA csIDLogInfo = CSimpleStringA::Format("IDNo:%s****%s"
-		, (const char*)tIdcode.SubString(0, 4), (const char*)tIdcode.SubString(tIdcode.GetLength() - 1, 1));
+	csIDInfo = CSimpleStringA::Format("%s", utf8Data->idno);
+	csIDType = CSimpleStringA::Format("%s", utf8Data->idType);
 #endif
+	if (csIDType.IsNullOrEmpty())
+		csIDLogInfo = SP::Module::Util::DataMask(SP::Module::Util::DataMask_IDCard, csIDInfo);
+	else if (csIDType.Compare("I") == 0 || csIDType.Compare("Y") == 0)
+		csIDLogInfo = SP::Module::Util::DataMask(SP::Module::Util::DataMask_ForeignerPR, csIDInfo);
+	else if (csIDType.Compare("J") == 0)
+		csIDLogInfo = SP::Module::Util::DataMask(SP::Module::Util::DataMask_HKMOPermit, csIDInfo);
+	else
+	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("IdType:[%s]", csIDType.GetData());
+		csIDLogInfo = SP::Module::Util::DataMask(SP::Module::Util::DataMask_UNKNOWN, csIDInfo);
+	}
 	LogWarn(Severity_Low, Error_Succeed, IDCertificate_UserErrorCode_ReadAndScan_GetIDInfo, csIDLogInfo.GetData());
 
 	if (utf8Data != nullptr)

+ 1 - 2
Module/mod_pinpad/PinPadFSM.cpp

@@ -600,7 +600,7 @@ ErrorCodeEnum CPinPadFSM::GetEncryptText(SpReqAnsContext<PinPadService_GetInputS
 	AccountInfo accInfo;
 	memset(accInfo.account, 0, MAX_ACCOUNT_LEN);
 	CSimpleStringA errMsg(true);
-
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("account[%s]", SP::Module::Util::DataMask(SP::Module::Util::DataMask_CardAccount, ctxSM->Req.account).GetData());
 	if (Get12Account(const_cast<char*>(ctxSM->Req.account.GetData())))
 		memcpy(accInfo.account, m_szAccount + 4, 12);
 	else
@@ -621,7 +621,6 @@ ErrorCodeEnum CPinPadFSM::GetEncryptText(SpReqAnsContext<PinPadService_GetInputS
 
 	//memcpy(accInfo.account,"588571006555",12);
 	accInfo.dwAccLen = 12;
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("acc(%s)", accInfo.account);
 	m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
 	errCode = m_hDevHelper->SetAccNo(accInfo);
 	m_ullEndTime = SP::Module::Comm::RVCGetTickCount();