某个公司采用明文传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上a(0<a<10),然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 编写一个类,实现以下功能: 1)加密功能,对数字序列进行加密,输出加密结果,需要判断数字序列为4位整数。 2)解密功能,对数字序列进行解密,输出源码,需要判断数字序列为4位整数。 3) a作为类的私有变量,具有只读属性, a的数值在类初始化时作为参数传入,需要判断a 为0-9之间的整数,如果不是抛出异常
时间: 2023-10-11 10:13:00 浏览: 42
下面是实现该功能的代码,包含了加密解密和验证a的值是否合法的功能:
```python
class Encryption:
def __init__(self, a):
if a < 1 or a > 9:
raise ValueError("a must be an integer between 1 and 9")
self.__a = a
@property
def a(self):
return self.__a
def encrypt(self, num):
if not isinstance(num, int) or num < 1000 or num > 9999:
raise ValueError("num must be a 4-digit integer")
digits = [int(d) for d in str(num)]
encrypted_digits = [(d + self.__a) % 10 for d in digits]
encrypted_digits[0], encrypted_digits[3] = encrypted_digits[3], encrypted_digits[0]
encrypted_digits[1], encrypted_digits[2] = encrypted_digits[2], encrypted_digits[1]
encrypted_num = int("".join(str(d) for d in encrypted_digits))
return encrypted_num
def decrypt(self, num):
if not isinstance(num, int) or num < 1000 or num > 9999:
raise ValueError("num must be a 4-digit integer")
digits = [int(d) for d in str(num)]
decrypted_digits = [(d - self.__a) % 10 for d in digits]
decrypted_digits[0], decrypted_digits[3] = decrypted_digits[3], decrypted_digits[0]
decrypted_digits[1], decrypted_digits[2] = decrypted_digits[2], decrypted_digits[1]
decrypted_num = int("".join(str(d) for d in decrypted_digits))
return decrypted_num
```
使用示例:
```python
e = Encryption(3) # 初始化a为3的加密对象
encrypted = e.encrypt(1234) # 加密数字1234
print(encrypted) # 输出加密结果
decrypted = e.decrypt(encrypted) # 解密加密结果
print(decrypted) # 输出源码
print(e.a) # 输出a的值,只读属性
```
阅读全文