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

2024-01-27

我想在iOS中生成相同的加密字符串,在.net中生成android。我可以在 android 和 .net 中生成相同的字符串,但对于 Objective C 则不同。

安卓代码:

public static String encrypt(String key, String value) {
    try {
        SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
        AlgorithmParameterSpec iv = new IvParameterSpec(key.getBytes());
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
        return new String(Base64.encode(cipher.doFinal(value.getBytes("UTF-8")), Base64.NO_WRAP));

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

后端代码

public Encryption(input: string): any {

return CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(input), this.Cryptokey,

{

    keySize: 128 / 8,

    iv: this.iv,

    mode: CryptoJS.mode.CBC,

    padding: CryptoJS.pad.Pkcs7

});

} 在 Objective C 代码中

- (NSData *)AES256EncryptWithKey:(NSString *)key

{

// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [self length];

//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//That's why we need to add the size of one block here
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                      keyPtr, kCCKeySizeAES256,
                                      NULL /* initialization vector (optional) */,
                                      [self bytes], dataLength, /* input */
                                      buffer, bufferSize, /* output */
                                      &numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
    //the returned NSData takes ownership of the buffer and will free it on deallocation
    return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}

free(buffer); //free the buffer;
return nil;

}

我关注了这些网址加密 AES/CBC/PKCS7Padding https://stackoverflow.com/questions/39404038/encrypt-aes-cbc-pkcs7padding

如何在 Objective C 中使用 AES 256 CBC 加密 https://stackoverflow.com/questions/45832991/how-to-encrypt-with-aes-256-cbc-in-objective-c

使用 PKCS7Padding 的 AES CBC 加密在 Java 和 Objective-C 中具有不同的结果 https://stackoverflow.com/questions/37477635/aes-cbc-encryption-with-pkcs7padding-has-different-results-in-java-and-objective

根据我对 Objective C 的理解,我首先需要转换 NSData 中的密码,然后将其传递给 AES 加密方法。 此方法将返回给我加密的数据,现在我需要将其转换为 Base 64 字符串编码。 谁能告诉我应该怎么做才能为 iOS、Android 和 .net 生成相同的结果?

例如 如果我想在所有 3 个平台中加密字符串“xceedancce”并且我的密钥是 7061737323313233

那么在 Android 和 .net 中,结果是“uXDlYA4e8Z8HWd9rvNdXaw==”,但在 iOS 中结果相同

它是“l4zDDnwOVJ0dz2fl7HdKIA==” 谁能建议我应该在 Objective C 中做什么?

谢谢。


谢谢你,罗布。我对两者(Objective C 和 C#)都使用了 RNCryptor 库,它解决了我的问题。

这是我的 Objective C 代码:

-(NSString *)encryptUsingRNCryptor:(NSString *)strPassword{

NSData *data = [strPassword dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSData *encryptedData = [RNEncryptor encryptData:data
                                    withSettings:kRNCryptorAES256Settings
                                          password:kKeyForEncryption
                                             error:&error];
NSString *encryptString = [encryptedData base64EncodedStringWithOptions:0];

NSLog(@"enccrypted data ----->>>## %@ ## %@", encryptedData, encryptString);

// Decryption

NSData *decryptedData = [RNDecryptor decryptData:encryptedData
                                    withPassword:kKeyForEncryption
                                           error:&error];
NSString *decodedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];

NSLog(@" Decryted data ----%@ --------and string %@", decryptedData, decodedString);

return [encryptedData base64EncodedStringWithOptions:0];

}

对于 C# 解密,我们使用 RNCryptor-cs 库。

再次感谢罗布:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 逐行加密/解密文件?

    我对加密还很陌生 我正在尝试让逐行加密器工作 我需要能够在应用程序运行期间将加密行附加到文件中 而不仅仅是一大堆加密所有内容并保存 不过我玩得很开心 这是我的加密器 在我自己多次尝试失败后被无耻地窃取 class Encryption pr
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 无法将“SDWebImageActivityIndi​​cator”类型的值分配给“ST_SDWebImageIndicator”类型?

    I have multiple flavours targets in my Xcode project I am also using SDWebImage in my app Everything was working fine un
  • Android 原理图内容提供程序库配置?

    Jake Wharton 在最近的一次演讲中提到了这个库 它看起来是避免大量样板文件的好方法 所以我尝试了一下 但没有任何成功 https github com SimonVT schematic https github com Simo
  • 使用 NSURLSessionDataTask 显示文件下载进度

    我想显示特定文件的文件下载进度 收到了多少字节 它与 NSURLSessionDownloadTask 配合得很好 我的问题是我想用 NSURLSessionDataTask 实现同样的效果 以下是将文件接收到 NSData 并写入文档文件
  • 如何防止 RealmSwift 列表中出现重复项?

    如何防止向列表中添加重复项RealmSwift 我有我的User作为领域对象 但真正的数据源是服务器 只是使用领域在本地缓存用户 当我从服务器获取当前用户数据时 我想确保存储在领域中的用户拥有来自服务器的所有播放列表 以及它们的曲目列表等
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • 在 Jetpack Compose 中启动动画矢量 Drawable

    我有一个动画矢量可绘制R drawable my anim 我想在 Jetpack Compose 中展示并开始 可绘制对象显示 渲染正确 但动画未启动 这是撰写视图 Composable fun SplashView Surface mo
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • Android相机意图:如何获取全尺寸照片?

    我正在使用意图来启动相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE getParent startActivityForR
  • 将带有地理位置数据的照片保存到照片库 Swift 3

    如何使用地理位置元数据将照片保存到照片库 我已请求 并允许 应用程序访问用户位置 private func allowAccessToUserLocation locationManager CLLocationManager locati
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 无法运行我的应用程序,要求选择 Android SDK

    今天我已经安装了Android Studio 金丝雀 1 现在我无法运行我的应用程序 将出现以下对话框 我已经通过 文件 gt 项目结构 gt Android SDK 位置 设置了正确的 SDK 位置 期待您的帮助来解决这个问题 警告对话框
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项

随机推荐

  • React-Intl 如何从变量切换语言环境和消息

    我正在尝试弄清楚如何使用 React Intl 更改语言 这是我的第一个 React 应用程序 它是用 create react app 制作的 我没有使用 Redux 或 Flux 在我的 index js 中 我有以下代码 import
  • ggplot2,使用主题后轴不显示(axis.line=element_line())

    我正在尝试使用以下方法绘制下图ggplot2包 但不知何故轴不会显示 刻度线在那里 只是不在轴线上 我已经用过theme axis line element line 功能 但它不起作用 这是我的代码 library ggplot2 ggp
  • 如何从Raspberry Pi Zero发送实时传感器数据到PC?

    我写了一个Python3脚本 运行在树莓派零W从 IMU 传感器 MPU9250 收集数据并创建 3 个不同的角度值 滚动 俯仰 偏航 看起来像这样 def main while True dataAcc mpu readAccelerom
  • 在 Windows 中传输大文件的最佳方法

    在备份我们的网络电子邮件服务器期间 我经常需要在内部和外部驱动器之间传输 gt 50GB 有时 gt 100GB 的大文件 传输这些文件的最佳方法是什么 命令行 例如 XCOPY 如果由于时间限制或网络问题而中断 可能有足够强大的功能可以继
  • Jersey - 为资源方法注册 ExceptionMapper

    问题特定类的异常处理 映射 https stackoverflow com questions 36370991让我想到了如何注册的问题ExceptionMapper到特定资源Method 我尝试过使用DynamicFeature像这样 动
  • 对 node.js、connect-mongo 的并行请求、会话被覆盖

    在当前的项目 一种商店系统 中 我使用node js快递JS and 连接 mongo作为会话存储 在客户端 我在启动时使用单个请求来创建一个新会话 然后向 Node js 服务器发送多个并行请求 当然 因为这些并行请求会更改会话 所以这些
  • Golang:JSON:如何将字符串数组解组为 []int64

    Golang encoding json包让你使用 string结构标记以便编组 解组字符串值 例如 309230 into int64场地 例子 Int64String int64 json string 但是 这不适用于切片 即 int
  • 与 join 一起计数

    我想找出哪个播放列表包含超过 2 首歌曲 该语句有效 但我想要播放列表的名称和显示的歌曲的 count 我想我必须使用连接 但我不明白它应该如何工作 有人可以帮忙吗 playlist table id name playlist songs
  • 从具有 NaN 的多维数组中找出最小值

    我有一个二维数组 double 我想知道最小值是多少 我尝试了 Linq Select Min 但由于我的数组通常包含NaN值 那么minvalue总是NaN 因此 我需要某种方法来找到 跳过 NaN 的最小值 任何帮助深表感谢 今天是扩展
  • 反向应用提交到工作副本

    为了研究先前提交引入的效果 我想将其反向应用到我的工作副本并修改代码 我管理了围绕创建和应用补丁的工作流程 但想知道这是否可以更容易地完成 git checkout b tmp fiddle git diff R p d9fd2bb d9f
  • JSF Converter 错误消息中的自定义变量

    我有一个表单页面 其中有一个接受日期的 inputText 字段 我们有一个转换器 可以将文本框中的字符串转换为 Date 对象 即 2011 03 01 到 java util Date 2011 03 01 如果字符串不是日期 例如 1
  • 带 URL 操作的 JSF 表单?

    有没有什么方法可以调用 URL 操作
  • 使用 java UrlConnection 通过 ntlm(或 kerberos)进行身份验证

    我需要使用 java 使用 REST Web 服务 传递域用户帐户的凭据 现在我正在用经典的asp来做 set xmlHttp server createObject msxml2 serverxmlhttp xmlHttp open me
  • 如何在 django 中禁用南调试日志记录?

    当我在 Django 中运行测试时 失败后我从 South 获得了几页调试输出 如下所示 south DEBUG south execute CREATE INDEX sometable 4d5bad5 ON video playable
  • Rails 删除链接 JavaScript ajax 调用

    我想创建一个ajax删除调用 单击链接时 应出现确认框 然后 p 标签淡出 注释 问题在于ajax调用应该如何以及如何显示确认框 HTML 视图 a class softdelete href blogs 5 comments 18 sle
  • 如何在 Core 2.0 的 ConfigurationBuilder 中设置BasePath

    如何在 Core 2 0 的 ConfigurationBuilder 中设置基本路径 我用谷歌搜索并发现this https stackoverflow com questions 33169589 specify the applica
  • 使用密钥保管库的更安全方式

    通常 当您使用密钥保管库加密和解密数据时 您必须以纯文本形式将 AD 注册应用程序 有权访问密钥保管库 的 ClientID 和 ClientSecret 保存在某处 如果有人窃取了 ClientID 和 Secret 那么任何人都可以声称
  • 如何设置机器人的状态

    所以我试图让我的机器人流媒体与抑郁症 但我已经尝试了多种方法 但它们不起作用 我尝试过这些方法 client user setPresence game name with depression status online bot user
  • 我可以在 BigQuery 中检索外部表数据的文件名吗?

    希望为部门团队实现一个简单的数据存储 他们目前在其中管理大量 excel csv 文件 我们将让他们准备文件并将它们以 CSV 格式放入 GCS 存储桶中 然后将外部 BQ 表指向此 一切都很好 但是 如果他们运行查询并看到一些数据 然后想
  • 在 Objective C、.net 和 Android 中生成相同的加密字符串 AES/CBC/PKCS7Padding

    我想在iOS中生成相同的加密字符串 在 net中生成android 我可以在 android 和 net 中生成相同的字符串 但对于 Objective C 则不同 安卓代码 public static String encrypt Str