java - 我怎样才能在 Java 中获得与过时的 Swift 代码相同的字节数?

标签 java swift

我试图在 Java 中获取以下代码段的相同字节数。我正在使用已知 key 加密字符串进行解密。但是,我无法在 Java 中重现这两行代码。

let usrKey: NSData! = (usrKey as NSString).data(using: String.Encoding.utf8.rawValue) as NSData!
let keyBytes = UnsafeMutableRawPointer(mutating: usrData!.bytes)
  1. 如何在 Java 中获得相同的 keyBytes
  2. Java 语言中,上面的等价表达式是什么?
  3. 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)

问题是找到正确的方法来获取用户 key (可以很短,所以填充)并在 Swift 之间创建类似的 32 字节(解密算法需要) > 和 Java 代码。

最佳答案

Java 行

byte [] keyBytes = userKey.getBytes("UTF-8");

应该与 Swift 的两条线具有相同的效果。问题可能出在您在问题中显示的代码之外。您可能希望同时调试 Swift 和 Java 代码以确保 usrKey 匹配 userKey 并且生成的 keyBytes 在 Swift 和Java.

请参阅 https://developer.apple.com/documentation/swift/unsafemutablerawpointer/2427850-init 上的 Apple 文档mutating 的含义。另请参阅 Apple 文档以了解任何其他与 API 相关的问题。

关于java - 我怎样才能在 Java 中获得与过时的 Swift 代码相同的字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973323/

相关文章:

java - 你如何将 java double 减少到 n 位有效数字?

ios - PFFacebookUtils.logInInBackgroundWithReadPermissions 无法识别的选择器发送到实例

ios - 点击后退按钮时隐藏搜索栏

java - 在 Spring 中使用 AutoWire 时如何处理新的实现?

java - 在 Spring MVC 中将参数从 JSP 传递到 Controller

java - Intellij/Android Studio 可以将多个 catch block 合并为一个吗?

ios - 我如何将这个 Swift 3 Singleton 用作我的 IOS 项目的全局计时器?

ios - 如何在 CoreData 中使用 NSPredicate 进行排序和限制?

javascript - WKWebView 不支持 JavaScript 类

java - 计算器对所有提出的问题返回 0.0