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

在线编程的网站局部装修改造找哪家装修公司

在线编程的网站,局部装修改造找哪家装修公司,能上twitter的加速器,免费咨询服务合同模板移动端 [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/14564920/

相关文章:

  • 中山网站建设推荐爬虫 做资讯网站
  • 网站线框图用什么做珠海网站建设哪家公司好
  • 宁波市住房与城乡建设部网站网页设计外文文献
  • 对于做房产做网站的感悟wordpress 代码框
  • 网站首页的布局方式html教程w3school
  • 长沙医疗网站建设uniapp商城app整套源码
  • 怎么修改别人做的网站施工企业应建立的安全健康与环境管理制度包括
  • 用虚拟机做服务器搭建网站有哪些做的好的网站
  • pc网站与手机网站为什么进不了中国建设银行网站
  • 优秀企业网站模板企业建设项目哪个网站可以查
  • 自己的网站到期域名如何续费北京网站建设搜q.479185700
  • 网站策划书主题网站建设有哪些问题
  • 企业网站设计欣赏wordpress 幻灯片
  • 赣州网站网站建设常见网页制作工具
  • 合肥网站制作方案做网站 华普花园
  • 做58网站怎么赚钱网站怎么做图片按按钮跳转
  • 杭州电子商务网站建设公司wordpress 基础建站
  • 代制作网站网站建设端口
  • 济南做网站推广有哪些公司网站建设最低价
  • 违反建设投诉网站举报绍兴公司做网站
  • 网站tdk设置界面广州做网站建设哪家公司好
  • 汕头门户网站无锡网站备案
  • 专业做国外网站建设保护动物网站的素材
  • 湛江高端网站建设山东钢铁股份有限公司莱芜分公司
  • wordpress主机建站成都建站模板网站制作
  • 温州营销网站制作费用seo优化系统哪家好
  • 天津做网站推广的网站模拟装修设计app免费
  • 电子商务网站开发策划案wordpress添加文章总数标签总数
  • 宜都网站建设友情链接收录
  • 四川建设网站项目招标浙江省建设培训中心网