我已经在这方面工作了很长时间,但被卡住了。我正在编写一个 iOS 应用程序,它从 Go 服务器端应用程序中获取 AES 加密数据并对其进行解密。我在 iOS 端使用 CCCryptor 进行解密。但是,对于我的一生,我无法获取明文。有一个可用的 Java/Android 实现,它在 Go 端解密得很好,所以我很确定这与我的 CCCryptor 设置有关。我实际上在解密时获得了 0 成功状态,但是获取输出并执行 NSString initWithBytes 会给我一个空字符串。注意:我只是在写 iOS 方面。去加密的代码:func encrypt(key, text []byte) []byte { block, err := aes.NewCipher(key) if err != nil { panic(err) } b := encodeBase64(text) ciphertext := make([]byte, aes.BlockSize+len(b)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { panic(err) } cfb := cipher.NewCFBEncrypter(block, iv) cfb.XORKeyStream(ciphertext[aes.BlockSize:], []byte(b)) return ciphertext}解密的Objective-C代码+ (NSData *)decrypt:(NSData*)data withPassword:(NSString*)password{NSData * key = [password dataUsingEncoding:NSUTF8StringEncoding];size_t dataLength = [data length] - kCCBlockSizeAES128;NSData *iv = [data subdataWithRange:NSMakeRange(0, kCCBlockSizeAES128)];NSData *encrypted = [data subdataWithRange:NSMakeRange(kCCBlockSizeAES128, dataLength)];//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(dataLength);NSMutableData *ret = [NSMutableData dataWithLength:dataLength + kCCBlockSizeAES128];
- 1 回答
- 0 关注
- 196 浏览
添加回答
举报
0/150
提交
取消