当前位置: 首页 > news >正文

做dj网站能赚钱吗wordpress秒开

做dj网站能赚钱吗,wordpress秒开,南宁网站怎么制作公司,浙江和海建设集团网站首页感觉iOS自带的CryptoKit不好用#xff0c;有个第三方库CryptoSwift还不错#xff0c;好巧不巧#xff0c;清理过Xcode缓存后死活下载不下来#xff0c;当然也可以自己编译个Framework#xff0c;但是偏偏不想用第三方库了#xff0c;于是研究了一下#xff0c;自带的Com…感觉iOS自带的CryptoKit不好用有个第三方库CryptoSwift还不错好巧不巧清理过Xcode缓存后死活下载不下来当然也可以自己编译个Framework但是偏偏不想用第三方库了于是研究了一下自带的CommonCrypto也可以达到项目需求。 代码主要包含以下算法 AES128/CBC/NoPadding AES128/CTR/NoPadding AES-CMAC import Foundation import CommonCryptoclass AESUtil {private init(){}//////AES-CMAC///static func CMAC(key: Data, data: Data) - Data? {let blockSize 16var subKey1 Data(count: blockSize)var subKey2 Data(count: blockSize)// Step 1: Generate subkeysguard generateSubKeys(key: key, subKey1: subKey1, subKey2: subKey2) else {return nil}// Step 2: Calculate the number of blockslet blockCount (data.count blockSize - 1) / blockSize// Step 3: Process each blockvar lastBlock Data(count: blockSize)for i in 0..blockCount {let blockRange i * blockSize..min((i 1) * blockSize, data.count)var block data.subdata(in: blockRange)if i blockCount - 1 {if block.count blockSize {block.append(0x80)while block.count blockSize {block.append(0x00)}block xor(data: block, with: subKey2)} else {block xor(data: block, with: subKey1)}}lastBlock xor(data: lastBlock, with: block)lastBlock CBC(key: key, data: lastBlock, isEncrypt: true)!}return lastBlock}private static func generateSubKeys(key: Data, subKey1: inout Data, subKey2: inout Data) - Bool {let blockSize 16let zeroBlock Data(count: blockSize)guard let L CBC(key: key, data: zeroBlock, isEncrypt: true) else {return false}subKey1 generateSubKey(block: L)subKey2 generateSubKey(block: subKey1)return true}private static func generateSubKey(block: Data) - Data {let blockSize 16var subKey Data(count: 16)var overflow falsefor i in (0..blockSize).reversed() {let byte block[i]let shiftedByte byte 1subKey[i] shiftedByte | (overflow ? 1 : 0)overflow (byte 0x80) ! 0}if overflow {subKey[blockSize - 1] ^ 0x87}return subKey}private static func xor(data: Data, with other: Data) - Data {var result Data(count: data.count)for i in 0..data.count {result[i] data[i] ^ other[i]}return result}//////AES128/CBC/NoPadding加解密//////param isEncrypt true加密false解密///static func CBC(key: Data, data: Data, isEncrypt: Bool) - Data? {return AES128NoPadding(key: key, iv: Data(count: 16), data: data, mode: CBC, isEncrypt: isEncrypt)}//////AES128/CTR/NoPadding加解密//////param isEncrypt true加密false解密///static func CTR(key: Data, data: Data, isEncrypt: Bool) - Data? {return AES128NoPadding(key: key, iv: Data(count: 16), data: data, mode: CTR, isEncrypt: isEncrypt)}//////AES128/NoPadding加解密//////param mode 支持CBC、CTR///param isEncrypt true加密false解密///static func AES128NoPadding(key: Data, iv: Data, data: Data, mode: String, isEncrypt: Bool) - Data? {let bufferLength data.count kCCKeySizeAES128var buffer Data(count: bufferLength)var numBytesEncrypted: size_t 0let operation isEncrypt ? kCCEncrypt : kCCDecryptlet cryptStatus: CCCryptorStatus buffer.withUnsafeMutableBytes { (bufferPtr: UnsafeMutableRawBufferPointer) inkey.withUnsafeBytes { (keyPtr: UnsafeRawBufferPointer) iniv.withUnsafeBytes { (ivPtr: UnsafeRawBufferPointer) indata.withUnsafeBytes { (dataPtr: UnsafeRawBufferPointer) in//调用加密函数var modeSource 0if mode CBC {modeSource kCCModeCBC} else if mode CTR {modeSource kCCModeCTR}let cryptorRef UnsafeMutablePointerCCCryptorRef?.allocate(capacity: 1)var status CCCryptorCreateWithMode(CCOperation(operation), CCMode(modeSource), CCAlgorithm(kCCAlgorithmAES), CCPadding(ccNoPadding), ivPtr.baseAddress, keyPtr.baseAddress, kCCKeySizeAES128, nil, 0, 0, CCModeOptions(0), cryptorRef)if status kCCSuccess {status CCCryptorUpdate(cryptorRef.pointee, dataPtr.baseAddress, data.count, bufferPtr.baseAddress, bufferLength, numBytesEncrypted)} else {print(CCCryptorCreateWithMode fail: \(encryptError(status)))}return status}}}}if cryptStatus kCCSuccess {buffer.removeSubrange(numBytesEncrypted..bufferLength)return buffer}print(AES/\(mode)/NoPadding加解密失败: \(encryptError(cryptStatus)))return nil}private static func encryptError(_ status: CCCryptorStatus)- String {if status kCCParamError {return kCCParamError} else if status kCCBufferTooSmall {return kCCBufferTooSmall} else if status kCCMemoryFailure {return kCCMemoryFailure} else if status kCCAlignmentError {return kCCAlignmentError} else if status kCCDecodeError {return kCCDecodeError} else if status kCCUnimplemented {return kCCUnimplemented} else if status kCCOverflow {return kCCOverflow} else if status kCCRNGFailure {return kCCRNGFailure} else if status kCCUnspecifiedError {return kCCUnspecifiedError} else if status kCCCallSequenceError {return kCCCallSequenceError} else if status kCCKeySizeError {return kCCKeySizeError} else if status kCCInvalidKey {return kCCInvalidKey}return \(status)} }
http://www.w-s-a.com/news/76036/

相关文章:

  • 电商网站设计图片素材p2p网站建设石家庄
  • 莲塘网站建设如何文字推广一个婚恋网站
  • 医院网站建设工作汇报WordPress不发邮件了
  • 怎么做外语网站个人网页设计作品ps
  • 网站原型怎么做vps如何建两个网站
  • 商城网站建设源码嘉兴seo计费管理
  • 城乡建设网站证件查询系统wordpress 时间代码
  • php网站建设 关键技术做网站哪家正规
  • 网站开发用什么写得比较好谷歌的英文网站
  • 青岛网站建设公司在哪vivo手机商城
  • 兼职刷客在哪个网站做哪个网站做淘宝客
  • 眼科医院网站开发网络营销特点是什么
  • 提交网站给百度增加wordpress插件
  • 网站建设企业官网体验版是什么Wordpress哪个模板最快
  • 美丽说网站模板湖北可以做网站方案的公司
  • 北京西站进站最新规定建设网站的提成是多少
  • wordpress站点如何加速网站建设描述怎么写
  • 如何免费建造网站免费vi模板网站
  • 商丘做网站多少钱扬州大发网站建设
  • 网站建设哪家性价比高自己做项目的网站
  • 成立一个网站济宁营销型网站建设
  • 南通购物网站建设设计类平台网站
  • 专业网站建设咨询thinkphp网站源码下载
  • 怎么制作一个国外网站网站推广找哪家公司好
  • 免费做网站怎么做网站想在网上卖东西怎么注册
  • 淘宝网站建设的策划书网投怎么做网站
  • 如何免费做公司网站视频网站开发视频
  • 网站后台是怎么更新wordpress 大于2m的xm
  • 制作网页设计软件列表案例营销网站优化seo
  • 住房和建设建设局网站报告长官夫人在捉鬼