山石-Ultrasonic-好久不见45
.exe.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
这段配置文件的作用是:
-
指定应用程序运行时依赖的 .NET Framework 版本为
.NET Framework 4.7.2
。 -
确保应用程序在启动时加载正确的运行时环境。
-
检查是否有原始图像。
-
弹出一个保存文件对话框,让用户选择保存加密图像的位置。
-
将图像保存为PNG格式,然后对图像数据进行加密。
-
将加密后的图像数据保存到用户指定的文件路径。
-
遍历图像的每个字节。
-
对每个字节执行以下操作:
-
减去1。
-
将字节的高3位右移5位,低5位左移3位,然后将它们按位或。
-
对结果取反(按位取反)。
-
-
返回加密后的字节数组。
逆向还原图片
def decrypt_image_bytes(encrypted_bytes):
decrypted_bytes = bytearray(len(encrypted_bytes)) # 创建与加密数据等长的字节数组
for i, b in enumerate(encrypted_bytes): # 遍历每个字节
b = ~b & 0xFF # 按位取反并确保结果为一个字节
b = ((b & 0xF8) >> 3) | ((b & 0x07) << 5) # 恢复高低位顺序
b = (b + 1) & 0xFF # 加1并确保结果为一个字节
decrypted_bytes[i] = b # 存入解密后的字节
return bytes(decrypted_bytes) # 返回解密后的字节数据
# 主程序:读取加密图像文件,解密并保存为新的图像文件
if __name__ == "__main__":
# 读取加密图像文件
encrypted_file_path = "enc.png" # 加密图像文件路径
decrypted_file_path = "dec.png" # 解密后保存的文件路径
try:
with open(encrypted_file_path, "rb") as f: # 以二进制模式读取文件
encrypted_data = f.read() # 读取加密数据
# 调用解密函数
decrypted_data = decrypt_image_bytes(encrypted_data)
# 保存解密后的图像文件
with open(decrypted_file_path, "wb") as f: # 以二进制模式写入文件
f.write(decrypted_data)
print(f"解密成功!解密后的图像已保存为:{decrypted_file_path}")
except FileNotFoundError:
print(f"错误:文件 {encrypted_file_path} 未找到。")
except Exception as e:
print(f"解密过程中发生错误:{e}")
flagf62ead9d005bbf8fe4b7a5e9c2f56cc56}