2007年11月15日 星期四

.Net 2.0 內建的 Hex byte array converter

在 System.Runtime.Remoting.Metadata.W3cXsd2001 命名空間內 , 有.Net 2.0 內建的 Hex byte array converter:SoapHexBinary 可以作 Hex string anf byte array 之間的轉換,
http://msdn2.microsoft.com/zh-tw/library/system.runtime.remoting.metadata.w3cxsd2001.soaphexbinary_members(VS.80).aspx

2007年11月6日 星期二

讀取自然人憑證內的身分證字號後4碼

自然人憑證內的身分證字號後4碼,存放於OID=2.5.29.9 這個 extension 內,如果要用 windows 的 crypto api 讀取的話,要用到以下的 API
PCERT_EXTENSION WINAPI CertFindExtension(
__in LPCSTR pszObjId,
__in DWORD cExtensions,
__in CERT_EXTENSION rgExtensions[]
);

範例如下:
PCERT_EXTENSION pCert_extension;

pCert_extension=CertFindExtension(szOID_SUBJECT_DIR_ATTRS,pInfo->cExtension,pInfo->rgExtension);
char szID[5];
if (pCert_extension!=NULL){
// 身分證字號後4碼在這個擴充欄位的最後面
memcpy(szID,(char *)(pCert_extension->Value.pbData)+(pCert_extension->Value.cbData-4),4);
szID[4]=0;
printf("ID:%s\n",szID);
}