博客
关于我
php openssl aes ecb,php openssl_encrypt AES-128-ECB iOS
阅读量:793 次
发布时间:2023-02-27

本文共 3271 字,大约阅读时间需要 10 分钟。

AES加密与解密实现

本文将介绍如何在PHP和Objective-C中实现AES加密与解密功能,并结合具体案例进行验证。

PHP实现

function aesEncrypt() {
$data = openssl_encrypt('5ddbf06d-adfd-10f4-de2b-f39b13e8eb8d_1604996361', 'AES-128-ECB', decbin(1604996361));
echo 'encrypt='.$data.PHP_EOL;
return $data;
}
function aesDecrypt($secretData) {
$data = openssl_decrypt($secretData, 'AES-128-ECB', decbin(1604996361));
$arrU = explode('_', $data);
$uuid = $arrU[0];
echo 'decrypt='.$data.PHP_EOL;
echo 'decrypt11111='.$uuid.PHP_EOL;
}
加密过程说明
  • 加密函数aesEncrypt:使用PHP的openssl_encrypt函数进行AES-128-ECB加密。参数包括明文、加密算法和初始向量(IV)。
  • 解密函数aesDecrypt:使用openssl_decrypt进行解密,同样使用相同的密钥和IV。解密后,通过explode函数将密文拆分,提取唯一标识符(UUID)。
加密示例
  • 密文aZkNWORB4zD095e/GLIj0EL2Q20r7tcICMwZ9rRigwjAqhaSNJs7EcMYuKxNE1JT
  • 密钥1011111101010100100110100001001decbin(1604996361)转换结果)
注意事项
  • IV为空:在AES-128-ECB模式中,初始向量(IV)通常为空字符串。
  • 密钥长度:PHP中的AES-128-ECB需要128位密钥,decbin(1604996361)返回的二进制字符串长度为128位。

Objective-C实现

#import 
#import
NSString const *kInitVector = @"";
size_t const kKeySize = kCCKeySizeAES128;
NSData *cipherOperation(NSData *contentData, NSData *keyData, CCOperation operation) {
size_t dataLength = contentData.length;
void const *initVectorBytes = [kInitVector dataUsingEncoding:NSUTF8StringEncoding].bytes;
void const *contentBytes = contentData.bytes;
void const *keyBytes = keyData.bytes;
size_t operationSize = dataLength + kCCBlockSizeAES128;
void *operationBytes = malloc(operationSize);
if (operationBytes == NULL) {
return nil;
}
CCCryptorStatus cryptStatus = CCCrypt(operation,
kCCAlgorithmAES,
kCCOptionECBMode | kCCOptionPKCS7Padding,
keyBytes,
kKeySize,
initVectorBytes,
contentBytes,
dataLength,
operationBytes,
operationSize,
&actualOutSize);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:operationBytes length:actualOutSize];
}
free(operationBytes);
operationBytes = NULL;
return nil;
}
NSString *aesEncryptString(NSString *content, NSString *key) {
NSCParameterAssert(content);
NSCParameterAssert(key);
NSData *contentData = [content dataUsingEncoding:NSUTF8StringEncoding];
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *encryptedData = cipherOperation(contentData, keyData, kCCEncrypt);
return [encryptedData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
}
主函数main
int main(int argc, const char *argv[]) {
@autoreleasepool {
NSLog(@"---%@---", aesEncryptString(@"5ddbf06d-adfd-10f4-de2b-f39b13e8eb8d_1604996361", @"1011111101010100100110100001001"));
}
return 0;
}

验证结果

通过上述实现,可以验证加密过程是否正确。运行主函数可以看到加密后的Base64字符串:

aZkNWORB4zD095e/GLIj0EL2Q20r7tcICMwZ9rRigwjAqhaSNJs7EcMYuKxNE1JT

总结

本文详细介绍了PHP和Objective-C中AES加密与解密的实现方法,并结合实际案例进行了验证。通过合理选择密钥和初始向量(IV),可以实现高效的数据加密与解密功能。

转载地址:http://frvfk.baihongyu.com/

你可能感兴趣的文章
PAT Spell It Right [非常简单]
查看>>
PAT-1044. Shopping in Mars (25)
查看>>
PAT-乙级-1040 有几个PAT
查看>>
PAT1093 Count PAT's (25)(逻辑题)
查看>>
PATA1038题解(需复习)
查看>>
Patching Array
查看>>
Spring源码学习(二):Spring容器之prepareContext和BeanFactoryPostProcessor的介绍
查看>>
PatchMatchStereo可能会需要的Rectification
查看>>
Path does not chain with any of the trust anchors
查看>>
Path形状获取字符串型变量数据
查看>>
PAT甲级——1001 A+B Format (20分)
查看>>
Skywalking原理
查看>>
PAT甲级——1006 Sign In and Sign Out (25分)
查看>>
PAT甲级——1007 Maximum Subsequence Sum (25分)
查看>>
PAT甲级——1009 Product of Polynomials (25分)(最后一个测试点段错误)
查看>>
Spring对jdbc的支持
查看>>
PayPal网站付款标准版(for PHP)
查看>>
Paystack Android SDK 集成与使用指南
查看>>
pbf格式详解,javascript加载导出pbf文件示例
查看>>
PBOC2.0与3.0的区别
查看>>