如何看网站的语言delphi网站开发

news/2025/9/23 3:50:53/文章来源:
如何看网站的语言,delphi网站开发,wiki网站开发工具,南阳网站网站建设一、KeyStore描述 在 Android 开发中#xff0c;KeyStore 是一个用于存储密钥和证书的安全容器。它提供了一种安全的方式来存储敏感信息#xff0c;如密钥对、数字证书等#xff0c;以防止它们被未授权的应用或攻击者访问。 KeyStore 通常用于加密数据、数字签名、TLS/SSL…一、KeyStore描述 在 Android 开发中KeyStore 是一个用于存储密钥和证书的安全容器。它提供了一种安全的方式来存储敏感信息如密钥对、数字证书等以防止它们被未授权的应用或攻击者访问。 KeyStore 通常用于加密数据、数字签名、TLS/SSL 连接等场景。 Android 开发中使用 KeyStore 的常见场景 存储密钥对可以使用 KeyStore 来生成和存储公钥和私钥的密钥对。这些密钥对通常用于数据加密、数字签名等操作。 存储数字证书可以使用 KeyStore 来存储数字证书用于验证身份、建立安全连接等场景。 安全存储密码可以使用 KeyStore 来安全地存储密码、凭证、API 密钥等敏感信息以防止它们被未授权的应用或攻击者访问。 TLS/SSL 连接可以使用 KeyStore 来管理客户端证书和受信任的 CA 证书用于安全通信、建立 TLS/SSL 连接等操作。 双因素身份验证可以使用 KeyStore 来存储和管理双因素身份验证所需的密钥和证书用于提高身份验证的安全性。 在 Android 中KeyStore 是通过 java.security.KeyStore 类来实现的。可以使用该类来创建、加载、存储和检索密钥和证书。Android 提供了特定于 Android 平台的 KeyStore 实现称为 AndroidKeyStore它提供了更高级的安全功能如硬件支持、密钥链随机生成等。 二、KeyStore使用 // 密钥库类型 private const val PP_KEYSTORE_TYPE AndroidKeyStore // 密钥库别名 private const val PP_KEYSTORE_ALIAS pp_keystore_alias // 加密算法标准算法名称 private const val PP_TRANSFORMATION RSA/ECB/PKCS1Padding 1. 生成公私钥密钥对 /*** 触发生成密钥对.* * 生成RSA 密钥对包括公钥和私钥** return KeyPair 密钥对包含公钥和私钥*/private fun generateKey(): KeyPair {// 创建密钥生成器val keyPairGenerator KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA,PP_KEYSTORE_TYPE)// 配置密钥生成器参数KeyGenParameterSpec.Builder(PP_KEYSTORE_ALIAS,KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1).setDigests(KeyProperties.DIGEST_SHA256).build().run {keyPairGenerator.initialize(this)}// 生成密钥对return keyPairGenerator.generateKeyPair()} 通过上述代码使用“AndroidKeyStore”类型的密钥库生成 RSA 密钥对包括公钥和私钥。 后续针对数据的加密和解密就需要使用此时密钥库中生成的 公钥和私钥。 2. AndroidKeyStore 密钥库得到密钥对 公钥 /*** 获取公钥.** return 公钥*/private fun getPublicKey(): PublicKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().public}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.certificate.publicKey} 私钥 /*** 获取私钥.** return 密钥*/private fun getPrivateKey(): PrivateKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().private}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.privateKey} 3. 加密、解密 加密 /*** 数据加密.** param data 原始数据字符串* return 加密数据字节数组*/fun encryptData(data: String): ByteArray {return encryptDataInternal(data.toByteArray())}/*** 数据加密.** param bytes 原始数据* return 加密数据*/private fun encryptDataInternal(bytes: ByteArray): ByteArray {return getPublicKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.ENCRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()} 解密 /*** 数据解密.** param bytes 加密数据* return 原始数据字符串*/fun decryptData(bytes: ByteArray): String {return String(decryptDataInternal(bytes))}/*** 数据解密.** param bytes 加密数据* return 原始数据*/private fun decryptDataInternal(bytes: ByteArray): ByteArray {return getPrivateKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.DECRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()} 描述下Cipher对象参数 Cipher.getInstance(String transformation) 是用于获取 Cipher 对象的静态方法。它接受一个字符串参数 transformation该参数指定了要使用的加密算法、模式和填充方式 transformation 参数的格式通常为 algorithm/mode/padding其中 algorithm指定加密算法的名称如 AES、DES、RSA 等。mode指定加密模式如 ECB、CBC、CTR 等。padding指定填充方式如 PKCS5Padding、NoPadding 等。 例如我们当前工具类要使用 RSA 算法、ECB 模式和 PKCS5Padding 填充方式进行加密你可以使用如下的 transformation 参数 private const val PP_TRANSFORMATION RSA/ECB/PKCS1Padding 然后调用 Cipher.getInstance(transformation) 方法来获取对应的 Cipher 对象用于执行加密和解密操作。 在 Android 中常见的加密算法和模式包括 加密算法AES、DES、RSA 等。加密模式ECB、CBC、CTR、GCM 等。填充方式PKCS5Padding、NoPadding 等。 提示正常我们需要对加密的数据进行本地存储上述加密数据是ByteArray字节数组不太适合本地存储因此我们可以通过Base64将ByteArray数据转换为字符串进行保存取出数据之时再做Base64解码。 // ByteArray转Base64字符串 Base64.encodeToString(encryptedBytes, Base64.DEFAULT)// Base64字符串转ByteArray Base64.decode(encryptedString, Base64.DEFAULT) 到此为止基本的使用和简单的参数描述已经完成。 4. 完整代码 object KeyStoreHelper {// 密钥库类型private const val PP_KEYSTORE_TYPE AndroidKeyStore// 密钥库别名private const val PP_KEYSTORE_ALIAS pp_keystore_alias// 加密算法标准算法名称private const val PP_TRANSFORMATION RSA/ECB/PKCS1Padding/*** 数据加密.** param data 原始数据字符串* return 加密数据字节数组*/fun encryptData(data: String): ByteArray {return encryptDataInternal(data.toByteArray())}/*** 数据解密.** param bytes 加密数据* return 原始数据字符串*/fun decryptData(bytes: ByteArray): String {return String(decryptDataInternal(bytes))}/*** 数据加密.** param bytes 原始数据* return 加密数据*/private fun encryptDataInternal(bytes: ByteArray): ByteArray {return getPublicKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.ENCRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()}/*** 数据解密.** param bytes 加密数据* return 原始数据*/private fun decryptDataInternal(bytes: ByteArray): ByteArray {return getPrivateKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.DECRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()}/*** 获取公钥.** return 公钥*/private fun getPublicKey(): PublicKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().public}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.certificate.publicKey}/*** 获取私钥.** return 密钥*/private fun getPrivateKey(): PrivateKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().private}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.privateKey}/*** 触发生成密钥对.** 生成RSA 密钥对包括公钥和私钥** return KeyPair 密钥对包含公钥和私钥*/private fun generateKey(): KeyPair {// 创建密钥生成器val keyPairGenerator KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA,PP_KEYSTORE_TYPE)// 配置密钥生成器参数KeyGenParameterSpec.Builder(PP_KEYSTORE_ALIAS,KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1).setDigests(KeyProperties.DIGEST_SHA256).build().run {keyPairGenerator.initialize(this)}// 生成密钥对return keyPairGenerator.generateKeyPair()} } 参考 1. Android 密钥库系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

曰本做爰l网站潮阳网站制作

目录 什么是接口? 接口协议的类型 接口测试是什么 HTTP接口的测试用例设计 HTTP接口的测试方法 什么是接口? 在面向对象编程中,接口是一个抽象的概念,用于定义类应该具有的方法和属性。一个类可以实现一个或多个接口&#xf…

做app需要网站吗工程建设动态管理网站

一、线上查询及帮助命令 1.1 man 1.1.1 介绍 man 命令用于显示命令手册页面(manual pages),提供了关于命令、函数、系统调用等的详细文档和使用说明 1.1.2 使用方法 man [选项] [命令或函数或系统调用]1.1.3 参数详解 -f:显…

c 做网站方便吗中国建设银行租赁网站

override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.//首先获得应用程序目录的路径,在该目录下有三个文件夹:文档目录、库目录、临时目录以及一个程序包。该目录就是应用程序的…

一般建站公司用什么cms网站首页快照应该怎么

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

建设网站的功能定位是什么意思seo优化培训机构

https://www.bilibili.com/video/BV1714y1j7AU/?spm_id_from333.337.search-card.all.click&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf

贵阳企业网站设计与建设html编辑器文字居中

在很多对象显示为字符串的时候都会使用到ToString中的格式化,由于以前没怎么注意到这个问题,想总结一下各个基础结构对象的格式化,以便后备之用!!!Int.ToString(format): 格式字符串采用以下形式&#xff1…

韶关网站建设制作打广告推广怎么做

1.动态链接库的使用 动态库支持以两种模式使用,一种模式下,在程序加载运行时,完成动态链接。一种模式下,在程序运行中,完成动态链接。 1.1.程序加载运行时完成动态链接 我们通过一个实例介绍程序加载运行时&#xff0c…

网站访问量什么意思河北先进网站建设风格

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目…

网站设计代码案例附近的装修公司地点

本文转载自公众号:Nebula Graph Community 。我们都知道《权利的游戏》在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外“惊喜”,当中复杂交错的人物关系也是它火爆的原因之一,而本文介绍如何通过 NetworkX 访…

上海网站推广模板成都做网站建设公司

Redis的慢查询 许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似…

怎么做资源类网站网站建设外文版政策文件

【Spark-HDFS小文件合并】使用 Spark 实现 HDFS 小文件合并 1)导入依赖2)代码实现2.1.HDFSUtils2.2.MergeFilesApplication 需求描述: 1、使用 Spark 做小文件合并压缩处理。 2、实际生产中相关配置、日志、明细可以记录在 Mysql 中。 3、…

专业找工作网站下载网站统计如何做

来源:ScienceAI编辑 :萝卜皮密歇根大学安娜堡分校新兴技术治理专家 Shbita Parthasarathy 表示,从大量文本中生成流利语言的机器学习算法可能会改变科学研究的方式,但不一定会变得更好。在2022 年 4 月 27 日发布的一份报告中&…

组成原理毕业设计代做网站推荐郑州网页制作

文章目录 环境总结测试使用EXPOSE测试1:不做端口映射测试2:-p 8080:80测试3:-P测试4:--networkhost 不使用EXPOSE 参考 环境 RHEL 9.3Docker Community 24.0.7 总结 如果懒得看测试的详细信息,可以直接看结果&#…

目前好的推销网站水务 网站建设

#交换设备 配置OSPF认证-基于华为路由器 OSPF(开放最短路径优先)是一种内部网关协议(IGP),用于在单一自治系统(AS)内决策路由。OSPF认证功能是路由器中的一项安全措施,它的主要用途…

网站开发过程文档网站店铺vr场景可以做吗

背景 由于对应用上线后流量越来越大,原来的按年自动分区性能跟不上,因此决定改成按月自动分区,同时将原有分区数据重新迁移到新的分区 步骤 修改表分区为一个月一个分区 alter table my_table set INTERVAL (NUMTOYMINTERVAL(1, month));…

网站域名与网站首页网址行业网站建站

在日常的数据存储与交换中,移动硬盘因其便携性和大容量而备受青睐。然而,有时我们可能会遇到一种令人困扰的现象:当试图打开移动硬盘时,系统会弹出一个警告窗口,提示“磁盘未被格式化,是否现在格式化&#…

软件下载网站模板自做头像的网站

654 最大二叉树 题目链接:最大二叉树 思路 这道题目是让我们构造最大二叉树并返回根节点。谈及二叉树,首先要确定遍历方式,这道题目一个符合思维的遍历方式是前序遍历(中左右),先有中间节点,然后递归构造左节点和右…

定制做网站费用百度题库

js 制动控制 代码 是 :setInterval(function(){$(".egg").click();},1000); 使用方法:调出浏览器放控制台(console),一般是按F12,将上述代码粘贴后回车就可以自动运行了。转载于:https://www.cnblogs.com/Look_Sun/p/3798903.htm…

建立手机也可浏览的网站教程宁波公司建设网站

一、压力测试介绍 网站压力测试是一种评估网站性能、可靠性和稳定性的方法。它通过模拟大量用户同时访问网站,来测试网站的响应时间、吞吐量、资源利用率等指标,从而发现网站的潜在问题和瓶颈。下面我将从几个方面详细介绍网站压力测试: 1、压力测试的目的 评估网站在高并发…

闸北区网站建设网页制win7 iis 网站

一、需求场景 在前端开发过程中,经常会需要重新请求后台进行代码调试,之前的常规方法是刷新浏览器页面或者点击页面进行交互,这样对多个请求的场景就很方便,但是往往很多时候我们只是单纯的想重新发起一个请求(多个请求…