java实现第二届蓝桥杯异或加密法
2023-09-14 08:58:10 时间
异或加密法.
在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
解密的方法就是再执行一次同样的操作。
加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。
下面的代码演示了如何实现该功能。
请仔细阅读,填写空缺的代码(下划线部分)。
void f(char* buf, unsigned char* uckey, int n)
{
int i;
for(i=0; i<n; i++)
buf[i] = buf[i] ^ uckey[i]; //异或运算,即:buf[i] ^= uckey[i]
}
int main(int argc, char* argv[])
{
char p[] = "abcd中国人123"; // 待加密串
char* key = "11001100010001110"; //以串的形式表达的密匙,运算时要转换为按位存储的形式。
int np = strlen(p);
int nk = strlen(key);
unsigned char* uckey = (unsigned char*)malloc(np); // unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位)
// 密匙串需要按位的形式循环拼入 uckey中
int i;
for(i=0; i<np*8; i++)
{
if(key[i%nk]=='1')
______; // 填空1按位或
else
______; // 填空2按位与
}
f(p, uckey, strlen(p));
f(p, uckey, strlen(p));
printf("%s\n", p);
free(uckey);
return 0;
}
uckey[i/8] |= (unsigned char)0x80 >> (i%8)
uckey[i/8] &= ~((unsigned char)0x80 >> (i%8))
本题满分:14分
填空1:(7分)
uckey[i/8] |= (unsigned char)0x80 >> (i%8); //>>表示右移位,位逻辑运算符:&按位与,|按位或,^按位异或,~取反,移位运算符:<<左移,>>右移
从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃
填空2:(7分)
uckey[i/8] &= ~((unsigned char)0x80 >> (i%8));
注意所有逻辑等价形式都是正确的答案,比如可以使用左移位:
(unsigned char)0x80 >> 2 等价于:0x01 << 5
相关文章
- 深入java面向对象四:Java 内部类种类及使用解析(转)
- javascript 与 PHP 通信加密,使用AES 128 CBC no padding,以及ios,java,c#文章例子
- Java 开发环境配置--eclipse工具进行java开发
- Java实现 LeetCode 812 最大三角形面积 (暴力)
- Java实现 洛谷 P1028 数的计算
- java实现矩阵变换加密法
- Java实现 蓝桥杯 算法提高 文本加密
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- 【JAVA】 02-Java对象细节
- macos:安装java 17.0.6(android studio报错:Unable to locate a Java Runtime.)
- PHP OpenSSL实现RSA加密解密(通java)
- C#DES加密,JavaDES解密,另转C#和Java实现Des完整代码
- java.lang.OutOfMemoryError: Java heap space 解决方法
- Java加密:五、SM2国密算法
- Java中的LongAdder和AtomicLong有什么区别?
- Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同
- Atitit 安全措施流程法 目录 1. 常见等安全措施方法2 1.1. 安全的语言 代码法,编译型 java2 1.2. 安全编码法2 1.3. 安全等框架类库 api2 1.4. 加密法
- Atitit 安全流程法 目录 1. 常见等安全措施方法2 1.1. 安全的语言 代码法,编译型 java2 1.2. 安全编码法2 1.3. 安全等框架类库 api2 1.4. 加密法2
- 【java】Java连接mysql数据库及mysql驱动jar包下载和使用
- Cipher 使用 RSA非对称加密算法 - 公钥加密后,只有私钥才可以解密,私钥加密后,只有公钥才可以解密 - java具体使用 非对称加密算法 - 总结心得
- JAVA编程:java环境安装和helloworld
- 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )
- JAVA gc垃圾回收机制
- 【JAVA】【NIO】5、Java NIO Scatter / Gather
- Java:openjdk: error: Student is abstract; cannot be instantiated;java编译环境