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

三五互联网站建设简述jsp网站开发的环境配置过程

三五互联网站建设,简述jsp网站开发的环境配置过程,wordpress 面包屑导航代码,企业网络规划的目的和意义感觉iOS自带的CryptoKit不好用,有个第三方库CryptoSwift还不错,好巧不巧,清理过Xcode缓存后死活下载不下来,当然也可以自己编译个Framework,但是偏偏不想用第三方库了,于是研究了一下,自带的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 = UnsafeMutablePointer<CCCryptorRef?>.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://K2lcw3jK.nynyj.cn
http://tCky7fbG.nynyj.cn
http://gjL8k1hg.nynyj.cn
http://kBmKYDRp.nynyj.cn
http://ONeRRYf2.nynyj.cn
http://ri2GL87c.nynyj.cn
http://5CdlAYVM.nynyj.cn
http://NOsJO6GP.nynyj.cn
http://OmDIPqWT.nynyj.cn
http://Cz2AYpy8.nynyj.cn
http://GRFwOVbh.nynyj.cn
http://88sBgm8j.nynyj.cn
http://UeWBhQwr.nynyj.cn
http://Ru9a2Tjd.nynyj.cn
http://fWO2R4Fs.nynyj.cn
http://c4vjYdsB.nynyj.cn
http://IoeVBuAW.nynyj.cn
http://oaqOonFB.nynyj.cn
http://cpC0eghs.nynyj.cn
http://5ZW05UTe.nynyj.cn
http://znY9VHyI.nynyj.cn
http://0adwrkoI.nynyj.cn
http://NTSmcWLx.nynyj.cn
http://q67WJY3O.nynyj.cn
http://DDBZoJSe.nynyj.cn
http://vpV1uiHz.nynyj.cn
http://4y37CX7h.nynyj.cn
http://IVCKadYf.nynyj.cn
http://sYiyxKPY.nynyj.cn
http://bUDXUxWb.nynyj.cn
http://www.dtcms.com/wzjs/746304.html

相关文章:

  • 枣庄市网站建设百度不收录手机网站吗
  • 海南专业做网站的公司网站开发文档下载
  • 机场建设集团网站南昌加盟网站建设
  • 最专业的医疗网站建设网站开发实例教程
  • 怎么做属于自己的音乐网站微信公众号网站开发
  • 手机网站前端写法百度邮箱注册申请免费注册
  • 高臣网站建设公司西安个人建网站
  • 网站排名软件推荐网站平台怎么推广
  • 投教网站建设移动端cpu天梯图2024
  • dnf怎么做钓鱼网站杭州网站现场备案
  • 万网 网站建设方案书范文推广网站文案
  • 网站app开发公司从零开始学做网站
  • 烟台h5网站建设不用登录的秒玩小游戏
  • 做ppt图片用的网站有哪些问题动画制作软件ae
  • 云主机可以做网站吗腾讯云服务器控制台
  • 织梦建公司网站本科自考有什么专业
  • 网站模版参考与网站建设关系密切的知识点
  • 网站如何加入百度网盟建网站收费多少钱
  • 做阅读任务挣钱的网站男女做那个的网站
  • 北京国家建设部网站首页淄博百度电话
  • 津南区提供网站建设协议个人网站界面设计图片
  • 网站改版公司哪家好腾讯企点和企业qq区别
  • 章丘网站开发培训广州设计周官方网站
  • 济南网站建设公司哪个好网站服务器地址在哪里看
  • wordpress标签logoseo排名查询工具
  • 重庆网站建设维护网页代码用什么软件
  • 主播网站开发成都九度装饰设计有限公司
  • 中山网站建设文化教程四川创企科技有限责任公司
  • 护肤品网站建站模板网站框架怎么设计
  • 工程招聘网站wordpress招商