异或运算实现加密解密

异或运算符 ^,相同为 0,不同为 1(同 0 非 1)

由异或运算法则可知:a^a=0a^0=a

如果c=a^b,那么a=b^c,即a^b^b=a,^ 的逆运算仍然是 ^

利用异或运算的性质,对字符进行加密并输出密文,然后再解密
在这里插入图片描述
(1)密码系统

明文空间(全体明文的集合)、密文空间(全体密文的集合)、密钥空间(全体密钥的集合)

加密算法(一组由明文至密文的加密变换)、解密算法(一组由密文至明文的解密变换)

(2)加密算法

  • 对称加密,加密和解密的密钥相同,属于不公开密钥加密算法

  • 非对称加密,加密和解密的密钥不同,属于公开密钥加密算法

  • 发送方使用接收方的公钥加密,只有接收方能解密密文得到明文

    • 私钥加密,持有私钥或公钥才可以解密
    • 公钥加密,持有私钥才可以解密
  • 不可逆加密,加密过程不需要使用密钥,由哈希函数生成信息摘要

(3)信息摘要

一段数据的特征信息

发送方将数据和摘要一起传给接收方

接收方根据接收到的数据重新生成摘要

生成的摘要和接收的摘要相同,则说明数据正确

  • 不同的输入数据,产生不同的信息摘要
  • 单向性,只能由数据生成信息摘要,不能由信息摘要还原数据
  • 不论数据多长,都会产生固定长度的信息摘要
 		char secret = 'A'; // 密钥,加密和解密密钥相同
        char[] plainText = {'草', '船', '借', '箭'}; 
        char[] cipherText = new char[plainText.length];

		// 密文:[茈, 艸, 偞, 篬]
        for (int i = 0; i < plainText.length; i++) {
            cipherText[i] = (char) (plainText[i] ^ secret);
        }
        System.out.println("密文:" + Arrays.toString(cipherText)); 

		// 明文:[草, 船, 借, 箭]
        for (int i = 0; i < cipherText.length; i++) {
            plainText[i] = (char) (cipherText[i] ^ secret);
        }
        System.out.println("明文:" + Arrays.toString(plainText)); 
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼悠奕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值