PKCS#5在Swift中填充
如何将PKCS5应用于NSData 似乎还没有太多关于这方面的信息,我发现这将是可行的,但我正在寻找一个“快速”的方法,如果可能的话 以下是我失败的尝试:PKCS#5在Swift中填充,swift,pkcs#5,Swift,Pkcs#5,如何将PKCS5应用于NSData 似乎还没有太多关于这方面的信息,我发现这将是可行的,但我正在寻找一个“快速”的方法,如果可能的话 以下是我失败的尝试: func pkcs5(data: NSData, blocksize: Int = 16) -> NSMutableData { var data = NSMutableData(data: data) let count = blocksize - data.length % blocksize for _
func pkcs5(data: NSData, blocksize: Int = 16) -> NSMutableData {
var data = NSMutableData(data: data)
let count = blocksize - data.length % blocksize
for _ in 0...count {
// somehow append the equivalent of chr(count) to data
}
return data
}
如果您了解Python,下面是我试图复制的函数:
def pkcs5_pad(data, blocksize=16):
pad_count = blocksize - len(data) % blocksize
return data + (chr(pad_count) * pad_count).encode('utf-8')
谢谢。您可以使用
appendBytes()
:
我认为@MartinR-answer没有问题,但如果您想要更多示例: 使用
libc
:性能
func pkcs5_mem(data: NSData, blocksize: Int = 16) -> NSData {
let count = blocksize - data.length % blocksize
let buf = UnsafeMutablePointer<UInt8>(malloc(UInt(data.length + count)))
// you should check `buf` is not `nil` here
memcpy(buf, data.bytes, UInt(data.length))
memset(buf + data.length, Int32(count), UInt(count))
return NSData(bytesNoCopy: buf, length: data.length + count)
}
使用Array
作为缓冲区:可能速度较慢
func pkcs5_array(data: NSData, blocksize: Int = 16) -> NSData {
let count = blocksize - data.length % blocksize
var buf = [UInt8]()
buf.reserveCapacity(data.length + count)
buf += UnsafeBufferPointer<UInt8>(start: UnsafePointer<UInt8>(data.bytes), count: data.length)
buf += [UInt8](count: count, repeatedValue: UInt8(count))
return NSData(bytes: buf, length: buf.count)
}
func pkcs5_数组(数据:NSData,块大小:Int=16)->NSData{
let count=blocksize-data.length%blocksize
变量buf=[UInt8]()
基本储备容量(数据长度+计数)
buf+=UnsafeBufferPointer(开始:UnsafePointer(data.bytes),计数:data.length)
buf+=[UInt8](计数:计数,重复值:UInt8(计数))
返回NSData(字节:buf,长度:buf.count)
}
@AndréDaniel:我添加了另一个版本,看起来更快速一些。但我怀疑它在性能上有什么不同,所以这主要是一个品味的问题。谢谢,效果很好。我还包括了你关于0.的建议。我做了一些性能测试:你的pkcs5_mem函数的速度与我的第一个函数差不多,比pkcs5_mutable快三倍,pkcs5_mutable的速度与我的第二个函数差不多(这也难怪,因为它们几乎相等)。pkcs5_阵列甚至更慢。
func pkcs5_mem(data: NSData, blocksize: Int = 16) -> NSData {
let count = blocksize - data.length % blocksize
let buf = UnsafeMutablePointer<UInt8>(malloc(UInt(data.length + count)))
// you should check `buf` is not `nil` here
memcpy(buf, data.bytes, UInt(data.length))
memset(buf + data.length, Int32(count), UInt(count))
return NSData(bytesNoCopy: buf, length: data.length + count)
}
func pkcs5_mutable(data: NSData, blocksize: Int = 16) -> NSData {
let count = blocksize - data.length % blocksize
let result = NSMutableData(capacity: data.length + count)!
result.appendBytes(data.bytes, length: data.length)
result.appendBytes([UInt8](count: count, repeatedValue: UInt8(count)), length: count)
return result
}
func pkcs5_array(data: NSData, blocksize: Int = 16) -> NSData {
let count = blocksize - data.length % blocksize
var buf = [UInt8]()
buf.reserveCapacity(data.length + count)
buf += UnsafeBufferPointer<UInt8>(start: UnsafePointer<UInt8>(data.bytes), count: data.length)
buf += [UInt8](count: count, repeatedValue: UInt8(count))
return NSData(bytes: buf, length: buf.count)
}