我使用< code>CommonCrypto来解密从服务器获取的加密MP3文件。实际上,服务器端使用带有CBC模式和< code>PKCS5Padding的AES 128位加密。所以我想用同样的方式解密它。
我使用下面的代码进行解密。
#import <CommonCrypto/CommonCrypto.h
func testCrypt(data:NSData, keyData:NSData, ivData:NSData, operation:CCOperation) -> NSData? {
let keyBytes = UnsafePointer<UInt8>(keyData.bytes)
print("keyLength = \(keyData.length), keyData = \(keyData)")
let ivBytes = UnsafePointer<UInt8>(ivData.bytes)
print("ivLength = \(ivData.length), ivData = \(ivData)")
let dataLength = Int(data.length)
let dataBytes = UnsafePointer<UInt8>(data.bytes)
print("dataLength = \(dataLength), data = \(data)")
let cryptData: NSMutableData! = NSMutableData(length: Int(dataLength) + kCCBlockSizeAES128)
let cryptPointer = UnsafeMutablePointer<UInt8>(cryptData.mutableBytes)
let cryptLength = size_t(cryptData.length)
let keyLength = size_t(kCCKeySizeAES128)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(kCCOptionPKCS7Padding)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
keyBytes, keyLength,
ivBytes,
dataBytes, dataLength,
cryptPointer, cryptLength,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
print("cryptLength = \(numBytesEncrypted), cryptData = \(cryptData)")
} else {
print("Error: \(cryptStatus)")
}
return cryptData;
}
如何在此代码中指定CBC模式和PKCS5填充
?
预先感谢
AES的块大小始终使用16个字节。而PKCS5Padd
的块大小定义为8个字节。因此您不能使用像AES/CBC/PKCS5Padd
这样的组合。您只能在块大小不超过8个字节时使用PKCS5Padd
。
其他事情
<code>CCCrypt</code>默认在<code>CBC</code>模式下工作,因此在这种情况下,您无需提及<code>的CBC</code>模式。例如,如果您想<code>ECB</code>模式,那幺您应该提到<code>kCCOptionECBMode</code>
不幸的是,苹果文档没有 PKCS5填充
。您可以使用 PKCS7 填充
替代方案 PKCS5 填充
,当您的块大小正好为 8 字节时。
我只想用这3种模式测试openSSL中的AES:128192和256密钥长度,但我解密的文本与我的输入不同,我不知道为什么。此外,当我传递一个巨大的输入长度(比如1024字节)时,我的程序显示。。。我的意见总是一样的,但这并不重要,至少现在是这样。代码如下: 编辑: 当我将输出大小更改为而不是时,我得到了结果: 那么,是否有可能存在Outpus大小和IV大小的问题?它们应该有什么尺寸(AES-CB
我一直在搜索一个Java代码示例来执行以下操作,但没有成功。我正在为我的特殊情况寻找解决办法。 已使用“testtest”为密码生成密钥和IV: 我可以访问加密文件,盐,钥匙和IV。我不相信我会收到密码。此外,我还安装了无限强度JCE策略。到目前为止,我只找到了另一个java程序进行加密并生成这些参数的示例。对于我的情况,我必须使用salt、key和iv值来解密一个文件。这在Java中是可能的吗?
我在使用java AES/CBC/PKCS7Padding加密时遇到了问题。我已经在使用提供程序之前进行搜索和跟踪。但我还是无法得到正确的加密 假设要求是: 加密类型:对称 算法:AES 块大小=128Bit(16字节) 密码模式:CBC 填充模式:PKCS7 加密密钥长度:256 Bit(32字节) 向量初始化长度(IV):128 Bit(16字节) 示例: 普通数据=ABC123 加密数据(b
我已经设法使它能够处理不包含og a-zA-Z0-9之外的字符和一些特殊字符的文本,但如果我使用丹麦字母,如ielouangØ,解密的文本会显示?而不是实际的字母。所有文件都保存为UTF-8,头字符集=UTF-8 Javascript - input: "tester for php: 我试过选项0,OPENSSL_ZERO_PADDING和OPENSSL_RAW_DATA,结果相同。有人能帮我吗
问题内容: 我在另一个文件中有一个XML文件和一个XML模式,我想验证我的XML文件是否遵循该模式。如何在Python中执行此操作? 我希望使用标准库,但是如果需要,我可以安装第三方程序包。 问题答案: 我假设您的意思是使用XSD文件。令人惊讶的是,没有太多支持此功能的python XML库。但是,lxml确实可以。使用lxml检查验证。该页面还列出了如何使用lxml与其他架构类型进行验证。
我必须在PHP中以AES CTS模式(密文窃取,有时称为AES-XTS)加密和解密数据,以便与用NET平台。英寸NET 4,本机支持这种模式。 对于PHP,我找不到解决方案,根据手册,mcrypt似乎不支持这种模式。 任何人都可以解释一下普通CBC和CBC-CTS之间的区别吗?是否可以使用现有的模块/库使后者在PHP中工作?