- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有在 Windows 平台中使用的密码代码,它使用 Crypto API 函数,需要将其转换为在 OS X 上使用 Common Crypto。
基本上原始代码是这样的,为简洁起见删除了错误检查:-
CryptAcquireContext(&m_hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT));
CryptCreateHash(m_hProv, CALG_MD5 ,0, 0, &hHash);
CryptHashData(hHash,(LPBYTE)pszInputData, lstrlen(pszInputData)*sizeof(TCHAR), 0);
CryptDeriveKey(m_hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE | 0x00280000, &m_hKey);
CryptDecrypt(m_hKey, 0, bFinal, 0, pData, pdwDataSize);
据我了解,这是正在发生的事情:-
CryptAcquireContext - Get an object to handle the cryptography
CryptCreateHash - Create an MD5 hashing object
CryptHashData - Hash the input data with MD5
CryptDeriveKey, CryptDecrypt - Decode pData with RC4, using the key m_hKey
pszInputData大小为12字节,MD5哈希对象的输出数组在两个平台上是一样的。
为了使用 RC4 进行解码,我正在使用 Common Crypto 执行以下操作:-
CCCryptorRef cryptor = NULL;
CCCryptorCreate(kCCDecrypt, kCCAlgorithmRC4, 0,
(void*)m_hKey.data(), m_hKey.length(), NULL, &cryptor);
char outBuffer[12];
size_t outBytes;
CCCryptorUpdate(cryptor, (void*)pData, *pdwDataSize, outBuffer, 12, &outBytes);
使用在线 RC4 解码器测试 Common Crypto 的输出(outBuffer 数组)是否匹配,因此解码正确。
但是,pData 中 Windows 代码的最终输出与 Common Crypto 中解码的 RC4 不匹配。
这里的 Windows Crypto API 调用是否有一些我遗漏或不理解的步骤?为什么输出不同?
(请注意,我不是在寻找有关使用 RC4 的安全性或缺陷的评论)
最佳答案
问题原来是理解 CryptDeriveKey 如何使用 RC4 解密的指定位数。
CryptDeriveKey(m_hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE | 0x00280000, &m_hKey);
此处说明我们需要一个 40 位 key (0x00280000 = 40 << 16)。
但是,当调用 CryptDecrypt 时,Windows 实际上使用 16 个字节作为 key ,取前 40 位并将数组的其余部分设置为零。
因此,将仅设置了前 40 位的 16 字节 key 传递给 CCCryptorCreate 函数会生成到 Windows 的匹配输出。
关于CryptoApi 到 CommonCrypto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30919161/
我在导入 CommonCrypto/CommonCrypto 或 CommonCrypto/CommonDigest 时遇到问题。我的 Swift 代码需要 SHA256。 我在 Cocoapods
module.map 创建文件 在文件中添加如下代码, module CommonCrypto [system] { header "/usr/include/CommonCrypto/Commo
我有在 Windows 平台中使用的密码代码,它使用 Crypto API 函数,需要将其转换为在 OS X 上使用 Common Crypto。 基本上原始代码是这样的,为简洁起见删除了错误检查:-
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我正在构建一个混合语言框架。我主要有 Swift 文件和一些 Objective-C 文件。 其中一个 Objective-C 文件是一个使用 CommonCrypto 的加密类。 似乎由于某种原因我
我对如何让这个 podspec 起作用感到很生气。 我正在开发一个 swift 框架,需要 CommonCrypto。在使其适用于每个团队(Cordova、React)的许多问题之后,这就是 Comm
我已经安装了最新版本的 Kingfisher 即 pod 'Kingfisher', '~> 5.0',但是当我尝试构建我的项目时,我收到以下信息编译错误: 没有这样的模块 'CommonCrypto
由于 Apple 已弃用在 iOS 中使用 openSSL,因此我需要在其中一个 iOS 安全框架中替代 PBKDF2。我试图搜索 CommonCrypto,但没有成功。 是否有苹果推荐的 PBKDF
我正在开发适用于 Android 和 IOS 的应用程序 对于 Android,我使用“AES/CBC/NoPadding”密码,对于 IOS,我使用 CommonCrypto,其算法/模式/填充与
准备将我的应用程序提交到 Apple 的 Itunes 商店并在提交过程中对一个问题感到困惑:“导出法律要求包含加密的产品必须获得适当的导出授权……您的产品是否使用加密? " 我使用 CommonCr
这个问题在这里已经有了答案: Where can I get CommonCrypto / CommonCrypto file from? (2 个答案) 关闭 5 年前。 如何将 Obj-C Co
指南是在桥接 header 中使用#import "CommonCrypto/CommonCrypto.h"。这是来自以下问题:SHA256 in swift . 但是,当我使用 Andi 和 Gra
如何导入 CommonCrypto在 iOS 的 Swift 框架中? 我了解如何使用 CommonCrypto在 Swift 应用程序中:您添加 #import 到桥接头。但是,Swift 框架不支
我正在尝试从 VB.NET 重新创建 PasswordDeriveBytes 的实现,到目前为止,我已经在 iOS Objective C 代码中实现了它,它给我带来了与 Java 实现不同的结果。
由于 CCKeyDerivationPBKDF 在 iOS 5.0 之后才可用,因此人们建议使用此处提供的 CommonCrypto 开源代码: http://www.opensource.apple
我添加了“NSData+CommonCrypto.h”和“NSData+CommonCrypto.m”以使用 sha256。我还添加了桥接 header “chekit-Bridging-Header
我创建了一个简单的库来使用 Swift 的 HMAC 摘要,名为 "SweetHMAC "。这个库非常简单,基本上是 Swift 中 CommonHMAC.h 的包装器。 我可以正确地使用 Sweet
这就是我到目前为止生成加密 key 的方式: unsigned char *salt; //8 salt bytes were created earlier unsigned char *passw
我正在将一些代码从 OSX 上的 C 移植到使用 CommonCrypto 和 kCN_CRC_64_ECMA_182 CRC64 实现的 C#。例如,使用 CommonCrypto,CRC 将通过以
当我尝试使用错误的 key 解密密文时,CCCrypt 返回 kCCDecodeError。 问题是,它这样做是否可靠(例如,我是否保证如果它返回成功,我的输入 key 就是用于加密纯文本的 key
我是一名优秀的程序员,十分优秀!