IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> (二)Kotlin加密/解密之凯撒加密算法 -> 正文阅读

[移动开发](二)Kotlin加密/解密之凯撒加密算法

Kotlin加密/解密系列

(一)Kotlin加密/解密之ASCII码



前言

前面我介绍了使用kotlin获取字符的ASCII码。本章的内容就和ASCII码有关系,凯撒加密算法就是通过操作相关字符ASCII码向前或者向后移动一个位移量,使ASCII码变成其他字符的。比如A的ASCII码是97,向后移动一位就变成了98,显示出来就是B,也就是以前的原文是A,加密后就是B。以此来达到安全的目的,具体的凯撒加密算法让我们一起来看看吧。


一、什么是凯撒加密算法?

凯撒加密算法其实很简单,就是操作字符的ASCII码,获得原文的每一个字符后,对每个字符的ASCII做偏移,偏移后再转成字符,这样原文就被加密了。加密过程如下:

在这里插入图片描述解密其实就是加密的逆过程,这里的加密算法其实就是对称加密,只是密钥是一个偏移量,得到这个偏移量和规则(+,-,*,/)就可以解密。

二、kotlin 实现凯撒加密算法

1.凯撒加密算法

代码如下:

    /**
     * 凯撒加密
     * @param content  原文
     * @param key 密钥
     */
    fun encrypt(content: String, key: Int): String {
        val charArray = content.toCharArray()
        val result = with(StringBuilder()) {
            charArray.forEach {
                //遍历每一个字符,对Ascii偏移
                //获取字符的ascii
                val c = it
                var ascii = c.code
                //移动
                ascii += key
                //转成字符
                val result = ascii.toChar()
                append(result)
            }
            toString()
        }

        return result
    }

2.凯撒解密

代码如下:

  /**
     * 凯撒解密
     * @param encryptTxt 加密后的密文
     * @key 密钥
     */
    fun decrypt(encryptTxt: String, key: Int): String {
        val charArray = encryptTxt.toCharArray()
        val result = with(StringBuilder()) {
            charArray.forEach {
                //遍历每一个字符,对Ascii偏移
                //获取字符的ascii
                val c = it
                var ascii = c.code
                //反向移动
                ascii -= key
                //转成字符
                val result = ascii.toChar()
                append(result)
            }

            toString()
        }

        return result
    }

调试代码:

fun main() {
    val command = "I love you"
    val key = 1

    val encrypt = CaesarCrypt().encrypt(command, key)
    val decrypt = CaesarCrypt().decrypt(encrypt, key)

    println("encrypt: $encrypt")
    println("decrypt: $decrypt")

}

运行结果:

在这里插入图片描述

这里补充一个知识,kotlin 的with()函数的使用

/**
 * Calls the specified function [block] with the given [receiver] as its receiver and returns its result.
 *
 * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#with).
 */
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return receiver.block()
}

可以看到传入的是一个参数T,本文中传的是一个StringBuilder对象:另一个参数是一个匿名函数,参数是传入T的扩展函数,也就是StringBuilder中的可以调用的函数,如append(),toString 之类的函数,返回值是R,也就是最后一行的类型

val result = with(StringBuilder()) {
            charArray.forEach {
                //遍历每一个字符,对Ascii偏移
                //获取字符的ascii
                val c = it
                var ascii = c.code
                //移动
                ascii += key
                //转成字符
                val result = ascii.toChar()
                append(result)
            }
            toString()
        }

从上面的代码中可以看出,使用with函数可以减少很多代码,假如不使用with.在with{}的函数体中可以使用StringBuilder中的可调用的函数,就像咱们在Activity中可以直接使用startActivity()方法一样。非常方便

假如不使用with函数,那么如下所示

  val charArray = command.toCharArray()
    val stringBuilder = StringBuilder()
        charArray.forEach {
            //遍历每一个字符,对Ascii偏移
            //获取字符的ascii
            val c = it
            var ascii = c.code
            //移动
            ascii += key
            //转成字符
            val result = ascii.toChar()
            stringBuilder.append(result)
        }
        
        stringBuilder.toString()

看起来代码就多了很多


总结

以上就是今天要讲的内容,本文仅仅简单介绍了凯撒算法的使用,但是凯撒算法很容易被破解,使用字符的频数分析法很容易破解,频数分析法感兴趣的小伙伴可以去网上看看,就是统计各个字符的出现频率,暴力获得解密的key,所以后面会介绍更安全的加密算法。下一章节见

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:04:20  更:2022-09-30 01:05:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:23:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码