请熟悉微软新加密接口(CNG)的前辈来,请教下 bcrypt/ncrypt 相同的接口有啥区别?
在微软下一代加密服务接口里,主要涉及到两个 DLL:bcrypt.dll 和 ncrypt.dll,头文件也是以 DLL 名称命名的。。
其中关于加解密部分,特别是密钥部分,两者很多接口相似或功能相同,连 MSDN 的文档也表示可以用这个也可以用那个。。。
我目前看出来的区别是 ncrypt 可以创建永久密钥保存到电脑,也能创建临时密钥;而 bcrypt 只能创建临时的不能保存对吧?
再一个就是 ncrypt 可以设置很多属性,比较灵活,而 bcrypt 貌似就几个用于密钥的属性(我不知道把 bcrypt 生成的密钥用 ncrypt 的 API 获取或设置属性行不行,应该试一下)
而其他的我就看不出啥区别了,好像对称加密/非对称加密,两者都有可以独立完成密钥生成和加解密操作的 API 吧。。。
1、为什么会这样呢?我们在使用的时候,用什么准则去选择用哪个接口呢?我是指两个都能实现需求的前提下。。。
2、比如要写个通用的模块(用在别的语言),在初始化函数里,用什么参数来确定该使用哪一套接口呢?跟上个问题基本类似。。。
3、哪个更底层呢?我个人觉得应该是 ncrypt 吧?是不是 bcrypt 的接口实际上是调用 ncrypt 的?
这是 MSDN 链接:https://docs.microsoft.com/en-us/windows/desktop/SecCNG/cng-portal