锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 榪欎釜JCE API綆楁硶鏀寔涓嬮潰鐨勫熀鏈搷浣?/p> JCE API鏀寔涓涓嬬殑緋葷粺錛屾垜鍙槸鍦╓indows2000涓婃祴璇曢氳繃錛屽叾浠栧鉤鍙版垜涓嶈兘淇濊瘉鐮磋В鑳芥甯鎬嬌鐢ㄣ? JCE 鏀寔JDK1.4浠ヤ笂錛孞DK1.3紼嶅井涓洪夯鐑︼紝瑕佽嚜宸遍厤鍒禞CE鍜孞SSE 鎴戝凡緇忓湪鍚夊ぇ姝e厓鐨別Safe閽ュ寵涓婇氳繃嫻嬭瘯錛屽叾浠栭挜鍖欐彁渚涘晢鍙互鍙戦偖浠剁粰鎴戯紝鎴栬呯粰Usb閽ュ寵鎴戝幓嫻嬭瘯銆?br /> JCAPI鐨凧CE Provider鎴戝皢浼氬湪涓嬩釜鏈堟彁渚?/p>
00000002聽聽聽聽100021A0聽聽聽聽_Java_com_pheox_jcapi_CoreCipherJNI_encrypt@20
00000003聽聽聽聽100027A0聽聽聽聽_Java_com_pheox_jcapi_CoreCipherJNI_encryptWithPrivateKey@20
00000004聽聽聽聽10001E10聽聽聽聽_Java_com_pheox_jcapi_CoreCipherJNI_getPrivateKeySize@12
00000005聽聽聽聽10003610聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_aliases@16
00000006聽聽聽聽100039D0聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_containsAlias@12
00000007聽聽聽聽10005E50聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_createBase64Hash@12
00000008聽聽聽聽10003B30聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_deleteEntry@12
00000009聽聽聽聽10003DA0聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_getCertificate@12
0000000A聽聽聽聽10003FE0聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_getCertificateChain@20
0000000B聽聽聽聽10004530聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_getKey@12
0000000C聽聽聽聽10004C00聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_isKeyEntry@12
0000000D聽聽聽聽10004E00聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_setCertificateEntry@16
0000000E聽聽聽聽10005020聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_setKeyEntry@44
0000000F聽聽聽聽10005CA0聽聽聽聽_Java_com_pheox_jcapi_CoreKeyStoreJNI_size@16
00000010聽聽聽聽100062A0聽聽聽聽_Java_com_pheox_jcapi_CoreSignatureJNI_hashFinal@12
00000011聽聽聽聽10005F80聽聽聽聽_Java_com_pheox_jcapi_CoreSignatureJNI_hashInit@12
00000012聽聽聽聽10006140聽聽聽聽_Java_com_pheox_jcapi_CoreSignatureJNI_hashUpdate@16
00000013聽聽聽聽10006430聽聽聽聽_Java_com_pheox_jcapi_CoreSignatureJNI_sign@28
00000014聽聽聽聽10006F60聽聽聽聽_Java_com_pheox_jcapi_CoreSignatureJNI_verify@28
00000015聽聽聽聽10007CF0聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_addPKCS11CSP@16
00000016聽聽聽聽10007880聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_createCertEntryStore@8
00000017聽聽聽聽10007C20聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getAddedPKCS11CSPs@8
00000018聽聽聽聽100078E0聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getCSP@12
00000019聽聽聽聽10008F10聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getCertStoreFriendlyName@12
0000001A聽聽聽聽100089C0聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getCertificateFriendlyName@12
0000001B聽聽聽聽10007500聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getJCAPIDLLVersion@8
0000001C聽聽聽聽10007520聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getMSCSPs@8
0000001D聽聽聽聽10009010聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getMSCertStoreNames@8
0000001E聽聽聽聽10007E20聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getPKCS11DLLName@12
0000001F聽聽聽聽100083F0聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getPKCS11TokenInfo@12
00000020聽聽聽聽10007B50聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_getSupportedPKCS11CSPs@8
00000021聽聽聽聽100077A0聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_init@12
00000022聽聽聽聽10007F40聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_isPKCS11PrivateKey@12
00000023聽聽聽聽10007D90聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_removePKCS11CSP@12
00000024聽聽聽聽10008F90聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_reportMemStatus@8
00000025聽聽聽聽10008360聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_setCallbackPinCode@12
00000026聽聽聽聽100083B0聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_setCertOpenStoreFlags@12
00000027聽聽聽聽10008C80聽聽聽聽_Java_com_pheox_jcapi_CoreUtilJNI_setCertificateFriendlyName@16
0000002C聽聽聽聽CertEnumSystemStore
00000041聽聽聽聽CertGetCertificateContextProperty
0000008B聽聽聽聽CryptFindLocalizedName
00000056聽聽聽聽CertRegisterSystemStore
00000097聽聽聽聽CryptHashCertificate
00000061聽聽聽聽CertSetCertificateContextProperty
00000019聽聽聽聽CertCreateCertificateContext
00000004聽聽聽聽CertAddCertificateContextToStore
00000044聽聽聽聽CertGetIssuerCertificateFromStore
0000001E聽聽聽聽CertDeleteCertificateFromStore
00000029聽聽聽聽CertEnumCertificatesInStore
0000007C聽聽聽聽CryptDecodeObject
0000009C聽聽聽聽CryptImportPublicKeyInfo
00000050聽聽聽聽CertOpenStore
00000032聽聽聽聽CertFindCertificateInStore
0000000F聽聽聽聽CertCloseStore
0000003C聽聽聽聽CertFreeCertificateContext
欏哄簭聽(紺烘剰)聽聽聽聽鍚嶅瓧
000000A8聽聽聽聽CryptSignHashA
00000099聽聽聽聽CryptGetHashParam
0000008B聽聽聽聽CryptDestroyHash
0000009D聽聽聽聽CryptHashData
00000088聽聽聽聽CryptCreateHash
00000094聽聽聽聽CryptExportKey
00000089聽聽聽聽CryptDecrypt
0000009F聽聽聽聽CryptImportKey
0000008F聽聽聽聽CryptEncrypt
0000009C聽聽聽聽CryptGetUserKey
0000009A聽聽聽聽CryptGetKeyParam
0000008C聽聽聽聽CryptDestroyKey
00000085聽聽聽聽CryptAcquireContextA
000000A0聽聽聽聽CryptReleaseContext
000000AA聽聽聽聽CryptVerifySignatureA
00000092聽聽聽聽CryptEnumProvidersA
000001C9聽聽聽聽RegCloseKey
000001EC聽聽聽聽RegQueryValueExA
000001F9聽聽聽聽RegSetValueExA
000001CD聽聽聽聽RegCreateKeyExA
000001E2聽聽聽聽RegOpenKeyExA
000000A1聽聽聽聽CryptSetHashParam
鍦ㄦ爣鍑嗙殑CryptoAPI鍑芥暟涓婄殑灝佽鏄湁蹇呰鐨勶紝鍥犱負浠嶫ava紼嬪簭鍛樼殑瑙掑害錛屾垜浠笉闇瑕佸お鍏沖績CSP錛屾垜浠笇鏈涚洿鎺ヨ繘琛孋ryptography榪愮畻銆?br />
JCAPI榪欎釜provider鎻愪緵3涓猄PI鐨勫疄鐜幫紝java.security.KeyStoreSpi
java.security.SignatureSpi
javax.crypto.CipherSpi
涔熷氨鏄紝鎴戜滑閫氳繃Java搴旂敤紼嬪簭鍙互鐩存帴鍊熷姪浜嶫CE API鏉ヨ皟鐢–ryptoAPI銆?
JCAPI鐨勬椂闂撮檺鍒舵瘮杈冨鏄撳幓闄わ紝浣嗙敱浜嶫NI灞備互涓婄殑浠g爜鍋氫簡澶ч噺娣鋒穯錛屾垜涓嶅緱涓嶉噸鍐欒繖涓狫CE Provider錛屾渶璧風爜瑕佸疄鐜?font face="Courier New">KeyStoreSpi錛孲ignatureSpi鍜孋ipherSpi銆?/font>
import com.pheox.jcapi.CoreSignatureJNI;
import com.pheox.jcapi.CoreUtilJNI;
import com.pheox.jcapi.JCAPIJNIException;
public class getcsp {
聽
聽聽聽 public static void main(String[] args) {
聽聽聽 聽
//聽聽聽聽聽聽聽 String g = "MIIDrTCCA2ugAwIBAgICAeYwCwYHKoZIzjgEAwUAMIGQMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVBhbG8gQWx0bzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxIzAhBgNVBAsTGkphdmEgU29mdHdhcmUgQ29kZSBTaWduaW5nMRwwGgYDVQQDExNKQ0UgQ29kZSBTaWduaW5nIENBMB4XDTA1MDEyMTIyNDc1MloXDTEwMDEyNTIyNDc1MlowVDEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxIzAhBgNVBAsTGkphdmEgU29mdHdhcmUgQ29kZSBTaWduaW5nMQ4wDAYDVQQDEwVQaGVveDCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GFAAKBgQD2cHtWHnwO9pOZx9H0uUoLZGKE3iwvVAkUwzVqVEgT4fMG70icn2dII/RABPtXW6Zai87iIg7zC975qeeEznBee7ll/8HFFe8H4IL3tPCf+/TigELMORl3ySd8lzD1mEZMYUL6Rc16T3ZJ3iUxfrJJiN815SZ8qrDkHAtS1Hhot6OBjTCBijARBglghkgBhvhCAQEEBAMCBBAwDgYDVR0PAQH/BAQDAgXgMB0GA1UdDgQWBBRkqtvyzwWOJd+aZikkKKFLDTaqbDAfBgNVHSMEGDAWgBRl4vSGydNO8JFOWKJq9dh4WprBpjAlBgNVHREEHjAcgRp0b21teS5ncmFuZGVmb3JzQHBoZW94LmNvbTALBgcqhkjOOAQDBQADLwAwLAIUdTerIDsy5CLjjPffwoO4rYWZ4kECFAyrKdfe2Qj5T5MWse9EhMD951Wt";
聽聽try {
聽聽聽System.loadLibrary("JCAPI");
聽聽聽System.out.println("Load Library Successfully!");
聽聽} catch(UnsatisfiedLinkError e)聽{
聽聽聽e.printStackTrace();
聽聽}
聽聽CoreUtilJNI core=new CoreUtilJNI();
聽聽
聽聽String[] mscsp=core.getMSCSP();
聽聽
聽聽for(int i=0;i<mscsp.length;i++)
聽聽聽System.out.println(mscsp[i]);
聽聽System.out.println("done");
聽聽
聽聽
聽聽String content="1234567890abcdefghij+sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";
聽聽
聽聽byte[] data = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
聽聽
聽聽data=content.getBytes();
聽聽
聽聽try
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽 int[] d= CoreSignatureJNI.hashInit("SHA1");
聽聽聽聽聽聽聽聽聽聽聽 CoreSignatureJNI.hashUpdate(d, data);
聽聽聽聽聽聽聽聽聽聽聽 byte abyte1[] = CoreSignatureJNI.hashFinal(d);
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 System.out.println(""+new String(abyte1));
聽聽聽聽聽聽聽聽聽聽聽 return;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 catch(JCAPIJNIException jcapijniexception)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽 聽jcapijniexception.printStackTrace();
聽聽聽聽聽聽聽 }
聽聽
聽聽
聽聽
聽聽
聽聽
聽}
}
HMAC 鍦ㄨ繖鏍蜂竴縐嶅満鏅腑琚簲鐢細
宸磋但灝斻佺﹩緗曢粯寰鋒槸涓轟紛鎷夊厠涓存椂鏀垮簻涓笉鍚岀殑浼婃柉鍏版淳緋伙紝鐢變簬緹庡浗宸茬粡鍦ㄤ紛鎷夊厠璁劇疆浜嗗ぇ閲忔儏鎶ユ満鏋勶紝浠栦滑鎷呭績鏀垮簻閮ㄥ唴閮ㄦ枃浠跺湪緗戠粶浼犺緭鍙兘琚編鍥芥儏鎶ュ眬淇敼錛岃冭檻璧瘋錛屽反璧皵銆佺﹩緗曢粯寰峰喅瀹氫嬌鐢?/span> MAC 鎶鏈細
1錛?span style="FONT: 7pt 'Times New Roman'">聽
浠栦滑鍟嗘Ψ涓涓畝鍗曠殑瀵嗛挜 Key12錛?span style="FONT: 7pt 'Times New Roman'">聽
浠栦滑鍟嗘Ψ涓縐嶅彲闈犵殑 HMAC 綆楁硶錛屽 HMACSHA13錛?span style="FONT: 7pt 'Times New Roman'">聽
浠栦滑姣忔鍙戦佹斂搴滃鎵規姤鍛婂墠錛岄兘鐢?/span> HMACSHA1 榪涜璁$畻錛屽茍灝嗚 hmac 鍊?/span> x1 闄勫甫鍙戦佺粰瀵規柟4錛?span style="FONT: 7pt 'Times New Roman'">聽
瀵規柟鎺ユ敹鍒版枃浠訛紝灝嗘枃浠惰繘琛屼竴嬈?/span> HMAC 鐨勮綆楋紝寰楀嚭鏂扮殑 hmac 鍊?/span> x2 錛屽姣?/span> x1 鍜?/span> x2 錛屽彲浠ョ煡閬撴枃浠舵槸鍚﹀湪涓旇淇敼榪囥?/span>娉ㄦ剰錛屼笂榪扮殑姝ラ濡傛灉涓嶈冭檻鎭舵剰鏀誨嚮鑰咃紝鍙互浣跨敤娑堟伅鎽樿錛屾伓鎰忔敾鍑昏呭彲浠ヤ慨鏀逛綘鐨勬枃浠訛紝鐒跺悗閲嶆柊甯綘璁$畻鎽樿錛屾渶鍚庢浛鎹綘鐨勬憳瑕侊細錛?/span>
聽聽聽聽聽聽 鍏充簬 HMAC 鐨勬洿澶氭爣鍑嗭紝鍙互鍙傝?/span> RFC2104 銆?/span>