首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Objective C、.net和Android中生成相同的加密字符串AES/CBC/PKCS7Padding.

在Objective C、.net和Android中生成相同的加密字符串AES/CBC/PKCS7Padding,可以按照以下步骤进行:

  1. 选择一个统一的密钥和初始化向量(IV),确保在三个平台上使用相同的密钥和IV。密钥和IV应该是随机生成的,并且在加密和解密过程中保持不变。
  2. 在Objective C中使用CommonCrypto库,可以使用以下代码生成加密字符串:
代码语言:txt
复制
#import <CommonCrypto/CommonCryptor.h>

NSString *encryptString(NSString *plainText, NSString *key, NSString *iv) {
    NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
    NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
    NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
    
    NSMutableData *encryptedData = [NSMutableData dataWithLength:plainData.length + kCCBlockSizeAES128];
    
    size_t encryptedLength = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmAES,
                                          kCCOptionPKCS7Padding,
                                          keyData.bytes,
                                          keyData.length,
                                          ivData.bytes,
                                          plainData.bytes,
                                          plainData.length,
                                          encryptedData.mutableBytes,
                                          encryptedData.length,
                                          &encryptedLength);
    
    if (cryptStatus == kCCSuccess) {
        encryptedData.length = encryptedLength;
        return [encryptedData base64EncodedStringWithOptions:0];
    }
    
    return nil;
}
  1. 在.net中使用System.Security.Cryptography命名空间,可以使用以下代码生成加密字符串:
代码语言:txt
复制
using System;
using System.Security.Cryptography;
using System.Text;

string EncryptString(string plainText, string key, string iv) {
    byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
    byte[] ivBytes = Encoding.UTF8.GetBytes(iv);
    
    using (Aes aes = Aes.Create()) {
        aes.Key = keyBytes;
        aes.IV = ivBytes;
        aes.Padding = PaddingMode.PKCS7;
        
        ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
        
        byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
        
        return Convert.ToBase64String(encryptedBytes);
    }
}
  1. 在Android中使用javax.crypto库,可以使用以下代码生成加密字符串:
代码语言:txt
复制
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import android.util.Base64;

String encryptString(String plainText, String key, String iv) {
    try {
        byte[] plainBytes = plainText.getBytes("UTF-8");
        byte[] keyBytes = key.getBytes("UTF-8");
        byte[] ivBytes = iv.getBytes("UTF-8");
        
        SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
        IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
        
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        
        byte[] encryptedBytes = cipher.doFinal(plainBytes);
        
        return Base64.encodeToString(encryptedBytes, Base64.DEFAULT);
    } catch (Exception e) {
        e.printStackTrace();
    }
    
    return null;
}

需要注意的是,以上代码只是生成加密字符串的示例,实际应用中还需要进行错误处理、密钥管理等其他安全措施。

推荐的腾讯云相关产品:腾讯云密钥管理系统(KMS)用于管理密钥,保护数据的安全性。详情请参考:腾讯云密钥管理系统(KMS)

请注意,以上答案仅供参考,具体实现方式可能因平台版本、库的不同而有所差异。在实际应用中,建议根据具体平台和库的文档进行进一步的研究和开发。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券