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

python经典百题之简单加密数据

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换

程序分析

对于给定的四位整数,要求按照一定规则进行加密:

  1. 每位数字都加上5。
  2. 然后用和除以10的余数代替该数字。
  3. 最后将第一位和第四位交换,第二位和第三位交换。

下面我们将使用三种不同的方法来实现这个加密任务,并分析它们的优缺点。

方法一:数学运算

解题思路

按照规则逐步进行数学运算,首先对每位数字加5,然后取余数代替,最后进行位交换。

实现代码

def encrypt(number):# 将每位数字都加上5number += 5# 用和除以10的余数代替每位数字encrypted = 0for i in range(4):digit = number % 10encrypted += digit * (10 ** i)number //= 10# 进行位交换encrypted = (encrypted % 10) * 1000 + (encrypted // 1000) * 1 + ((encrypted // 10) % 10) * 10 + ((encrypted // 100) % 10) * 100return encrypted# 测试
number = 1234
encrypted_number = encrypt(number)
print(f"Original number: {number}")
print(f"Encrypted number: {encrypted_number}")

优缺点

优点:

  • 简单易懂,容易实现。

缺点:

  • 实现稍微复杂一些,需要进行多次数学运算。
  • 可读性相对较低。

方法二:字符串操作

解题思路

将数字转换成字符串,然后按照规则进行字符串操作,包括字符的加减和交换。

实现代码

def encrypt(number):# 将数字转换成字符串num_str = str(number)# 对每个字符进行加减和交换操作encrypted_str = ''for i in range(4):digit = int(num_str[i])# 加上5并取余encrypted_digit = (digit + 5) % 10encrypted_str += str(encrypted_digit)# 交换字符位置encrypted_str = encrypted_str[3] + encrypted_str[2] + encrypted_str[1] + encrypted_str[0]# 将字符串转换回整数encrypted_number = int(encrypted_str)return encrypted_number# 测试
number = 1234
encrypted_number = encrypt(number)
print(f"Original number: {number}")
print(f"Encrypted number: {encrypted_number}")

优缺点

优点:

  • 使用字符串操作更容易理解。

缺点:

  • 需要进行多次字符串操作,性能可能略低于数学运算方法。
  • 字符串操作可能需要额外的内存空间。

方法三:按位操作

解题思路

使用按位操作对每位数字进行加减和交换操作。

实现代码

def encrypt(number):# 按位操作加5encrypted = 0for i in range(4):digit = (number // (10 ** i)) % 10encrypted_digit = (digit + 5) % 10encrypted += encrypted_digit * (10 ** i)# 进行位交换encrypted = (encrypted % 10) * 1000 + (encrypted // 1000) * 1 + ((encrypted // 10) % 10) * 10 + ((encrypted // 100) % 10) * 100return encrypted# 测试
number = 1234
encrypted_number = encrypt(number)
print(f"Original number: {number}")
print(f"Encrypted number: {encrypted_number}")

优缺点

优点:

  • 使用按位操作,较数学运算方法性能稍好。
  • 代码相对简单,可读性较高。

缺点:

  • 仍需要进行多次数学运算和位操作。

总结

三种方法都可以实现加密任务,具体选择取决于个人偏好和项目需求。如果希望代码简洁易读,方法二(字符串操作)可能是一个好选择。如果性能是关键因素,方法三(按位操作)可能更好,因为它不需要进行字符串转换。方法一(数学运算)虽然可行,但相对较复杂,可读性较低,通常不是首选。

综合考虑,方法三(按位操作)通常是一个不错的选择,因为它兼顾了性能和代码简洁度。

http://www.lryc.cn/news/189270.html

相关文章:

  • 登陆认证权限控制(1)——从session到token认证的变迁 session的问题分析 + CSRF攻击的认识
  • 单点接地、多点接地、混合接地
  • 【C++初阶(一)】学习前言 命名空间与IO流
  • flask vue跨域问题
  • stm32(二十)IAP升级优化(双缓存,可恢复)
  • HDLbits:Exams/ece241 2013 q4
  • 什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?
  • Response Status Code 301、302
  • import { ref, onMounted, reactive } from ‘vue‘
  • 【TB作品】基于MSP430G2553单片机的超声波测距与报警系统,原理图,PCB
  • npm install报错
  • Flutter自定义model实体类
  • java项目实现不停服更新的4种方案(InsCode AI 创作助手)
  • 7.1 yolov5优化模型时,自动标注xml数据
  • 开发者职场“生存状态”大调研报告分析 - 第一版
  • 在MySQL中使用!=还能走索引吗?
  • 【算法题】2897. 对数组执行操作使平方和最大
  • 2023年中国划船机产量、销量及市场规模分析[图]
  • Kafka和RabbitMQ的对比
  • ffmpeg从一个视频中提取音频
  • CCF CSP题解:坐标变换(其一)(202309-1)
  • 跳表C语言
  • 【JavaEE】_tomcat的安装与简单使用
  • React 状态管理 - Context API 前世今生(上)旧版v16.3前
  • 微服务、SOA 和 API 之间的区别
  • python打印正反直角三角形
  • ubuntu安装Miniconda并举例使用
  • 如何保护您的数据免受.360勒索病毒的感染
  • 2024计算机保研--哈工大、中山、国防科大
  • Hadoop分布式集群搭建教程