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

在线编程的网站sql数据库添加网站

在线编程的网站,sql数据库添加网站,如何推广普通话的建议6条,企业网站报价方案模板下载移动端 [Android iOS] 压缩 ECDSA PublicKey AndroidiOS 使用 Android KeyStore 和 iOS 的 Secure Enclave 提供的安全能力使用 P-256 来对 API 请求进行签名#xff0c;服务器端再进行验证。 但是发现不论是 iOS 还是安卓都没有提供一个便捷的方式从 iOS 的SecKeyCopyE… 移动端 [Android iOS] 压缩 ECDSA PublicKey AndroidiOS 使用 Android KeyStore 和 iOS 的 Secure Enclave 提供的安全能力使用 P-256 来对 API 请求进行签名服务器端再进行验证。 但是发现不论是 iOS 还是安卓都没有提供一个便捷的方式从 iOS 的SecKeyCopyExternalRepresentation(SecKeyCopyPublicKey) 和 Android 的 KeyPair 中得到 33-bytes 的 compressed public key。 压缩公钥Compressed Public Key是一种公钥编码方式可以将 ECC椭圆曲线密码学公钥从 64 个字节压缩为 33 个字节。这种编码方式由一个字节的标识符和32个字节的公钥坐标的一部分y坐标组成从而实现了公钥的压缩。在使用压缩公钥时可以减少传输的数据量和存储空间同时保持相同的安全性和加密效果。压缩公钥广泛应用于比特币、以太坊等区块链领域中。 compressed_public_key y is even?0x02:0x03 x Android private fun secp256r1JKeyPair(packageManager: PackageManager,alias: String,throwIfNotExists: Boolean false, ): KeyPair {val ks: KeyStore KeyStore.getInstance(storeProvider).apply { load(null) }val keyPair: KeyPair if (ks.containsAlias(alias)) {val entry ks.getEntry(alias, null)if (entry !is KeyStore.PrivateKeyEntry) {throw TypeCastException()}KeyPair(entry.certificate.publicKey, entry.privateKey)} else if (throwIfNotExists) {throw KeyStoreException(No key was found with the alias $alias.)} else {val kpg: KeyPairGenerator KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, storeProvider)var properties KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT or KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFYval parameterSpec KeyGenParameterSpec.Builder(alias, properties).apply {setAlgorithmParameterSpec(ECGenParameterSpec(secp256r1))setDigests(KeyProperties.DIGEST_SHA256)if (Build.VERSION.SDK_INT Build.VERSION_CODES.P hasStrongBox(packageManager)) {setIsStrongBoxBacked(true)}}.build()kpg.initialize(parameterSpec)kpg.generateKeyPair()}return keyPair }OptIn(ExperimentalUnsignedTypes::class) fun bnUByteArrayToUByteArray(bnUByteArray: UByteArray, expectLength: Int): UByteArray {if (bnUByteArray.size expectLength 1) {return bnUByteArray.sliceArray(1..expectLength)}if (bnUByteArray.size expectLength) {return UByteArray(expectLength - bnUByteArray.size) { UByte.MIN_VALUE } bnUByteArray}return bnUByteArray }OptIn(ExperimentalUnsignedTypes::class) fun secp256r1PublicKey(packageManager: PackageManager,alias: String ): UByteArray {val kp secp256r1JKeyPair(packageManager, alias)val publicKey kp.public as ECPublicKey;val point publicKey.wval x: BigInteger point.affineXval y: BigInteger point.affineYval xBytes: UByteArray bnUByteArrayToUByteArray(x.toByteArray().toUByteArray(), 32)val yFLag UByteArray(1)yFLag[0] (if (y.testBit(0)) 0x03 else 0x02).toUByte()return yFLag xBytes }OptIn(ExperimentalUnsignedTypes::class) fun secp256r1Sign(packageManager: PackageManager,alias: String,payload: ByteArray ): UByteArray {val privateKey secp256r1JKeyPair(packageManager, alias).privateval signature Signature.getInstance(signatureAlgorithm).run {initSign(privateKey)update(payload)sign()}val seq DERSequence.fromByteArray(signature) as DLSequenceval r bnUByteArrayToUByteArray((seq.getObjectAt(0) as ASN1Integer).value.toByteArray().toUByteArray(), 32)val s bnUByteArrayToUByteArray((seq.getObjectAt(1) as ASN1Integer).value.toByteArray().toUByteArray(), 32)return r s }OptIn(ExperimentalUnsignedTypes::class) private fun byteArrayToHexString(byteArray: UByteArray): String {return byteArray.joinToString(separator ) { it.toString(16).padStart(2, 0) } }iOS static func secp256r1Key(name: String, requiresBiometry: Bool false) throws - SecKey {let flags: SecAccessControlCreateFlags requiresBiometry ? [.privateKeyUsage, .userPresence] : .privateKeyUsagelet access SecAccessControlCreateWithFlags(kCFAllocatorDefault,kSecAttrAccessibleWhenUnlockedThisDeviceOnly,flags,nil)!let tag name.data(using: .utf8)!let attributes: [String: Any] [kSecAttrKeyType as String : kSecAttrKeyTypeEC,kSecAttrKeySizeInBits as String : 256,kSecAttrTokenID as String : kSecAttrTokenIDSecureEnclave,kSecPrivateKeyAttrs as String : [kSecAttrIsPermanent as String : true,kSecAttrApplicationTag as String : tag,kSecAttrAccessControl as String : access] as [String : Any]]var error: UnmanagedCFError?guard let privateKey SecKeyCreateRandomKey(attributes as CFDictionary, error) else {throw error!.takeRetainedValue()}return privateKey }static func getCompressedPublicKey(key: SecKey) throws - Data {guard let publicKeyData SecKeyCopyExternalRepresentation(SecKeyCopyPublicKey(key)!, nil) as? Data else {throw NSError()}let x publicKeyData.dropFirst().prefix(32)let y publicKeyData.subdata(in: Range(33...64))return Data([0x02 | (y.last! 0x01)]) x }static func secp256r1Sign(name: String, payload: Data) - Data {let key secp256r1Key(name: name)var error: UnmanagedCFError?let asn1signature SecKeyCreateSignature(key!, .ecdsaSignatureMessageX962SHA256, payload as CFData, error)! as Datalet signature try! ECSignature(asn1: asn1signature)return signature.r signature.s }
http://www.hkea.cn/news/14591064/

相关文章:

  • 可以做游戏的网站有哪些方面wordpress主题不分页
  • 佛山网站优化什么价格网站制作实训
  • 蚂蚁中国网站建设wordpress 父级页面
  • lamp网站开发经验求制作网站
  • 邢台有什么网站wordpress页面突然不能访问
  • 做的好的农产品网站十堰网络销售
  • 公司网站维护工作龙口网站建设公司
  • 足球比分网站建设网站建设运维情况
  • 网站建设公司合同个人养老保险账户余额查询
  • 论坛类网站设计电商是干什么的是什么意思
  • 家居装修企业网站源码龙华网站建设方案表
  • 东莞网站推广模板信用网站标准化建设模块都有哪些
  • 利用模板如何制作网站设计图片素材
  • 网站建设注册哪类商标平面设计技术培训机构
  • 甘肃网站建设域名注册公司wordpress 伪静态设置
  • wordpress网站熊掌粉丝关注网站中英文版怎么做
  • 建站宝盒全能版怎么在微信上做网站
  • 南京中小企业网站制作平面设计培训机构排行
  • 做网站公司哪家好无线网络优化工程师
  • 网站系统维护要多久wordpress适合百度
  • 网站建设服务器的选择方式包括优秀的网站建设公司排名
  • 温州 网站建设公司类似wordpress的系统有哪些
  • 做游戏评论注册国外网站seo公司推广
  • 多城市分站站群cms深圳市住房保障署官网
  • 泰安市景区建设网站wordpress文档结构
  • 深圳网站制作培训资质升级业绩备案在哪个网站做
  • 现在什么网站比较火做推广企业宣传网站建设模板
  • 定制网站开发食道里感觉有东西堵白底图片在线制作
  • 深圳专业商城网站制作网站如何做播放线路
  • 网站微信二维码悬浮怎么做试玩平台推广网站