java - 我怎样才能在 Java 和有点过时的 Swift 代码中获得相同数量的字节?
问题描述
我试图在Java
. 我正在使用已知decryption
的encrypted
字符串key
。但是,我无法在Java
.
let usrKey: NSData! = (usrKey as NSString).data(using: String.Encoding.utf8.rawValue) as NSData!
let keyBytes = UnsafeMutableRawPointer(mutating: usrData!.bytes)
- 我怎样才能得到同样
keyBytes
的东西Java
? - 上述在
Java
语言中的等价表达会是什么? - 的行为是
mutating
什么?
我尝试使用的 Java 代码以及下面的错误。
byte [] keyBytes = userKey.getBytes("UTF-8");
SecretKeySpec secret = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secret, newIvParameterSpec(ivBytes));
byte[] outputBytes = cipher.doFinal(inputBytes);
input 16 bytes
iv 16 bytes
key 32 bytes
ALGORITHM - AES128/CBC/PKCS5Padding
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:991)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at javax.crypto.Cipher.doFinal(Cipher.java:2164)
问题是找到正确的方法来获取用户密钥(可能很短,因此可以填充)并在代码之间创建类似的(32 bytes
解密算法需要) 。Swift
Java
解决方案
Java 线
byte [] keyBytes = userKey.getBytes("UTF-8");
应该与两条 Swift 行具有相同的效果。问题可能不在您在问题中显示的代码范围内。您可能需要调试 Swift 和 Java 代码以确保usrKey
匹配userKey
和结果keyBytes
在 Swift 和 Java 中是相同的。
有关. _ _ mutating
有关任何其他 API 相关问题,请参阅 Apple 文档。
推荐阅读
- regex - 如何在 Nifi Regexpr 上提取组?
- c# - 如何从android本地文件夹加载assetBundle?
- android - 未显示通知
- haskell - 使用 Arrow 了解空间泄漏
- django - 如何仅通过增加数量来计算产品的总价格?
- javascript - 使用javascript单击锚点时为href赋值
- sql - 将格式化的 VARCHAR 分配给局部变量
- google-apps-script - 如何在使用 IMPORTRANGE 获取数据后插入行
- node.js - 如何使用 Node.js 连接到我的 redshift 集群?
- android - AdjustPan 计算