zoukankan      html  css  js  c++  java
  • python凯撒密码

    凯撒密码

    简介:凯撒密码(Caesar)是最早的代换密码,对称密码的一种

    算法:将每个字母用字母表中它之后的第k(称作位移值)个字母替代

    代码:

    #-*-coding:utf-8-*-
    __author__ = 007
    __date__ = 2016 / 02 / 04
    
    
    #==================================================================#
    #         凯撒密码(caesar)是最早的代换密码,对称密码的一种                #
    #   算法:将每个字母用字母表中它之后的第k个字母(称作位移值)替代            #
    #==================================================================#
    
    def encryption():
        str_raw = raw_input("请输入明文:")
        k = input("请输入位移值:")
        str_change = str_raw.lower()
        str_list = list(str_change)
        str_list_encry = str_list
        i = 0
        while i < len(str_list):
            if ord(str_list[i]) < 123-k:
                str_list_encry[i] = chr(ord(str_list[i]) + k)
            else:
                str_list_encry[i] = chr(ord(str_list[i]) + k - 26)
            i = i+1
        print "加密结果为:"+"".join(str_list_encry)
    
    def decryption():
        str_raw = raw_input("请输入密文:")
        k = input("请输入位移值:")
        str_change = str_raw.lower()
        str_list = list(str_change)
        str_list_decry = str_list
        i = 0
        while i < len(str_list):
            if ord(str_list[i]) >= 97+k:
                str_list_decry[i] = chr(ord(str_list[i]) - k)
            else:
                str_list_decry[i] = chr(ord(str_list[i]) + 26 - k)
            i = i+1
        print "解密结果为:"+"".join(str_list_decry)
    
    while True:
        print u"1. 加密"
        print u"2. 解密"
        choice = raw_input("请选择:")
        if choice == "1":
            encryption()
        elif choice == "2":
            decryption()
        else:
            print u"您的输入有误!"
    
    #if __name__ == "__main__":
    #    main

    运行结果:

    /usr/bin/python /Users/007/module/test.py
    1. 加密
    2. 解密
    请选择:1
    请输入明文:asdf
    请输入位移值:8
    加密结果为:ialn
    1. 加密
    2. 解密
    请选择:2
    请输入密文:ialn
    请输入位移值:8
    解密结果为:asdf

    知识点:

    ord()

    ord(c) -> integer

    参数是一个ascii字符,返回值是对应的十进制整数

    实例:

    1 In[2]: ord("a")
    2 Out[2]: 97

    chr()

    chr(i) -> character

    参数是0 - 256 的一个整数,返回值是当前整数对应的ascii字符。参数可以是10进制也可以是16进制的形式

    实例:

    1 In[3]: chr(97)
    2 Out[3]: 'a'
    3 In[4]: chr(0x61)
    4 Out[4]: 'a'
  • 相关阅读:
    java概述------
    java中有几种方法实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
    java的5个框架,哪个框架更适合你的项目?
    java的热门应用有哪些?
    vue-router 切换页面时怎么设置过渡动画
    Referrer Policy 介绍
    await进行同步操作
    vue中axios拦截器同一项目多域名如何配置
    正规方程求解特征参数的推导过程
    一种网页中显示代码所涉及的字符转义问题的解决方案
  • 原文地址:https://www.cnblogs.com/andr01la/p/5182319.html
Copyright © 2011-2022 走看看