美文网首页
凯撒加密解密

凯撒加密解密

作者: Q大疯zi | 来源:发表于2018-09-10 21:17 被阅读20次

学习到一个简单的加密算法,用Kotlin实现一下:

open class CaesarCrypt {
    /**
     * 凯撒加密算法
     */
    fun encrypt(str: String, key: Int): String {
        val result = with(StringBuffer()) {
            for (c in str.toCharArray()) {
                var result = c.toInt()
                result += key
                this.append(result.toChar())
            }
            this.toString()
        }
        return result
    }

    /**
     * 凯撒解密算法
     */
    fun decrypt(str: String, key: Int): String {
        val result = with(StringBuffer()) {
            for (c in str.toCharArray()) {
                var result = c.toInt()
                result -= key
                this.append(result.toChar())
            }
            this.toString()
        }
        return result
    }
}


fun main(args: Array<String>) {
    val text = "My house is perfect. By great good fortune I have found a housekeeper no less to my mind, a low-voiced, light-footed woman of discreet age, strong and deft enough to render me all the service I require, and not afraid of loneliness. She rises very early. By my breakfast-time there remains little to be done under the roof save dressing of meals. Very rarely do I hear even a clink of crockery; never the closing of a door or window. Oh, blessed silence! My house is perfect."
    val str = "hello world"
    val key = 15

    val encryptResult = CaesarCrypt().encrypt(str, key)
    println("加密算法结果:$encryptResult")
    val decryptResult = CaesarCrypt().decrypt(encryptResult, key)
    println("解密算法结果:$decryptResult")

    val textEncryptResult = CaesarCrypt().encrypt(text, key)
    //统计密文每个字符出现的个数
    val map = hashMapOf<Char, Int>()

    val toCharArray = textEncryptResult.toCharArray()
    toCharArray.forEach {
        println("字符数组:$it")
    }


    for (c in textEncryptResult.toCharArray()) {
        if (map.contains(c)) {
            map.put(c, (map.getValue(c) + 1))
        } else {
            map.put(c, 1)
        }

    }

    println("文章加密算法结果:$textEncryptResult")


    for ((k, v) in map) {
        println("含有字符:$k 个数$v ")
    }

    println("---------------")

    /**
     * 频度分析法,英文字符串中e字符出现的频率最高,所以先找解密后字符出现最高的字符
     * 分别为 / 其次是 t  ,根据/ - e 和 t - e的间距判断是-54 或者是 15,去解密
     * 测试后知道t为正确的,则key就为15
     * 
     *  //key -54  15
     *  //101  47  116
     */
    val textResult = CaesarCrypt().decrypt(textEncryptResult, 15)
    println("文章解密:$textResult")


}

相关文章

  • ios base64加解密,凯撒密码加解密

    1.base64加密,string为待加密字串 2.base64解密,string为待解密字串 3.凯撒密码加解密...

  • 凯撒加密解密

    学习到一个简单的加密算法,用Kotlin实现一下:

  • 图解密码技术学习-第二章 历史上的密码

    凯撒密码 原理 凯撒密码的实现方式就是对字母进行平移,加密向右平移的话,解密就向左平移 凯撒密码的算法就是平移,密...

  • 凯撒密码脚本

    凯撒密码的加密解密 前言 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过...

  • Java安全(未完待续)

    加密, 解密 凯撒密码 左右位移 凯撒密码--频度分析法 例如:在英文中 e 出现的频率是最高的将出现最多的字母付...

  • Caesar Cipher

    Caesar Cipher 题意:凯撒密码加密,输出对应的密文的明文思路:加密是将明文向右移位,那么解密就是将密文...

  • RAC算法 & HASH算法

    什么是RAC RAC是一种非对称加密算法,公钥加密,私钥解密。 扩展 凯撒密码:明文对应暗文,通过暗文对明文进行解...

  • 加密算法研究记录

    历史上的密码 凯撒密码 凯撒密码是通过将明文中所使用的字母表按照一定的字数“平移”来进行加密和解密的。 简单替换密...

  • AES加密代码(.net和java可互转)

    .net加密解密代码 java加密解密代码

  • 最近用到的一些String的一些常用方法

    string的Base64加密/解密 oc 加密 oc解密 swift 加密 swift 解密 oc字典转jso...

网友评论

      本文标题:凯撒加密解密

      本文链接:https://www.haomeiwen.com/subject/uduegftx.html