微软的Crypto API
简介
微软的Crypto API是一个强大的加密工具集,它为Windows应用程序提供了一套加密服务。这个API允许开发者在他们的应用程序中实现各种加密功能,比如数据加密、解密、密钥生成和数字签名等。
官网介绍
https://learn.microsoft.com/zh-cn/azure/rtos/netx/netx-crypto/chapter4
https://stackoverflow.com/questions/4796590/windows-c-c-crypto-api-examples-and-tips
RAS公司的PKCS#11标准
简介
PKCS#11(公钥加密标准#11)是由RSA Laboratories(RAS公司的前身)与一个国际小组共同开发的,它定义了一组平台无关的API,用于访问智能卡和其他加密设备。这个标准提供了一种方式,让应用程序可以与不同供应商的加密硬件进行交互,而无需关心硬件的具体实现细节。PKCS#11标准通常用于实现硬件安全模块(HSM)、智能卡和其他加密令牌。它定义了一个抽象的、独立于语言的接口,允许应用程序通过这个接口来访问加密设备的功能,如密钥管理、加密、解密、签名和验证等。
系统介绍
http://www.doc88.com/p-9117249687786.html
https://blog.csdn.net/shyrainxy/article/details/119959949
中国商用密码标准:GMT 0016-2012
简介
GMT 0016-2012和GMT 0018-2012是中国商用密码标准的两部分,分别涉及不同的密码技术应用。
GMT 0016-2012 智能密码钥匙密码应用接口规范:这个标准主要关注于智能密码钥匙的密码应用接口。它规定了基于PKI密码体制的智能密码钥匙的密码应用接口,包括函数、数据类型、参数的定义,以及设备的安全要求。这个标准适用于智能密码钥匙产品的研制、使用和检测。
GMT 0018-2012 密码设备应用接口规范:此标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准。它适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。
官网介绍
https://www.doc88.com/p-1166161064324.html
http://www.gmbz.org.cn/main/viewfile/20180110020423162671.html
http://www.gmbz.org.cn/main/viewfile/20180110020642562680.html
以上API在编程中的使用方式
使用方式和应用场景有所不同。
微软的Crypto API: 微软的Crypto API是一组提供在Windows操作系统中进行加密和解密操作的函数。在C#等.NET语言中,可以通过System.Security.Cryptography命名空间中的类来使用这些API。例如,使用AesCryptoServiceProvider类可以进行AES加密和解密。在C/C++中,可以通过Windows的bcrypt库或者advapi32.dll中的函数来使用Crypto API。
RAS公司的PKCS#11标准: PKCS#11标准定义了一组API,用于访问智能卡、硬件安全模块(HSM)和其他加密设备。在编程中,开发者通常需要包含PKCS#11的库,并使用这些库提供的函数来与加密设备进行交互。PKCS#11标准的应用非常广泛,几乎支持所有主要编程语言,包括C/C++、Java、C#等。使用PKCS#11,开发者可以管理密钥、执行加密操作、生成数字签名等。
中国的GMT 0016-2012和GMT 0018-2012标准: 这两个标准是中国的商用密码标准,它们定义了智能密码钥匙和服务类密码设备的接口规范。在编程中,开发者需要根据这些标准来实现与密码设备的交互。这通常涉及到使用特定的库或API,这些库或API实现了标准中定义的接口。例如,开发者可能需要使用特定的函数来管理密钥、执行加密操作或进行数字签名。
函数
微软的Crypto API:
·密钥管理:CryptAcquireContext, CryptGenKey, CryptDestroyKey等。
·数据加密/解密:CryptEncrypt, CryptDecrypt。
·数字签名/验证:CryptSignHash, CryptVerifySignature。
·哈希函数:CryptCreateHash, CryptHashData, CryptGetHashParam。
·随机数生成:CryptGenRandom。
RAS公司的PKCS#11标准:
·会话管理:C_OpenSession, C_CloseSession, C_Login, C_Logout。
·密钥管理:C_GenerateKey, C_CopyObject, C_DestroyObject, C_FindObjects等。
·数据加密/解密:C_Encrypt, C_Decrypt。
·数字签名/验证:C_Sign, C_Verify。
·哈希函数:C_Digest。
·随机数生成:C_GenerateRandom。
中国的GMT 0016-2012和GMT 0018-2012标准:
·密钥管理:包括密钥生成、导入、导出、销毁等操作。
·数据加密/解密:支持多种加密算法的加密和解密操作。
·数字签名/验证:提供签名生成和验证功能。
·哈希函数:支持多种哈希算法。
·设备管理:包括设备的初始化、配置、信息查询等。
异同点:
·相同点:这些API都提供了基本的加密功能,如数据加密/解密、数字签名/验证、哈希函数、密钥管理等。
·不同点:
微软的Crypto API:它是Windows操作系统的原生API,主要用于Windows平台的应用程序。
PKCS#11:这是一个跨平台的、与硬件无关的标准,主要用于与各种加密硬件(如智能卡、HSM)交互。
中国的商用密码标准:这些标准是专门为中国市场设计的,可能包含一些特定的加密算法和要求,适用于中国的商用密码产品。
调用接口
`public class DataTest {
public static String request(String httpUrl, String httpArg) {
BufferedReader reader = null;
String result = null;
StringBuffer sbf = new StringBuffer();
//httpUrl = httpUrl + "?" + httpArg;
try {
URL url = new URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("GET");
InputStream is = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sbf.append(strRead);
sbf.append("\r\n");
}
reader.close();
result = sbf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
/**
* @param urlAll
* :请求接口
* @param httpArg
* :参数
* @return 返回结果
*/
String httpUrl = "http://api.tianapi.com/txapi/ncovcity/index?key=d557d60eeebe9fa695424a6e3930a8fd";
String httpArg="";
System.out.println(request(httpUrl,httpArg));
}
}
`