6-4 字符串加密 (10 分) 本题要求实现一个函数,能对一行字符串(字符串的长度<80)加密。 加密函数采用的加密算法:如果不是英文字母,就不加密,原样显示;否则就将字母加上一个偏移值5实现加密。注意大小写英文字母分别构成一个封闭环,如字符‘w’,加密后为字符‘b’。
时间: 2023-05-03 11:02:35 浏览: 170
这道题要求实现一个函数,能对一行字符串(长度小于80)加密。加密函数采用的加密算法是:如果不是英文字母,则不加密,原样显示;否则就将字母加上一个偏移值5实现加密。注意大小写英文字符分别构成一个封闭环,如字符‘w’,加密后为字符‘b’。
相关问题
本题要求实现一个函数,能对一行字符串(字符串的长度<80)加密。 加密函数采用的加密算法:如果不是英文字母,就不加密,原样显示;否则就将字母加上一个偏移值5实现加密。注意大小写英文字母分别构成一个封闭
的集合,即大写字母加密后仍为大写字母,小写字母加密后仍为小写字母。
实现思路:
1. 遍历字符串中的每个字符,判断是否为英文字母。
2. 如果不是英文字母,直接将字符加入加密后的字符串中。
3. 如果是英文字母,判断是大写字母还是小写字母,分别进行加密。
4. 加密后的字符加入加密后的字符串中。
5. 返回加密后的字符串。
代码实现:
```python
def encrypt(s):
result = ''
for c in s:
if not c.isalpha():
result += c
elif c.isupper():
result += chr((ord(c) - 65 + 5) % 26 + 65)
else:
result += chr((ord(c) - 97 + 5) % 26 + 97)
return result
```
测试样例:
```python
print(encrypt('Hello, World!')) # Mjqqt, Btwqi!
print(encrypt('Python is a great language.')) # Udymts nx f lwjfy qfslhjw.
```
输出结果:
```
Mjqqt, Btwqi!
Udymts nx f lwjfy qfslhjw.
```
Linux C语言实现使用hmac_sha1实现对中间带多个换行符的字符串进行带key的加密
可以使用OpenSSL库中的hmac_sha1函数来实现对中间带多个换行符的字符串进行带key的加密。具体实现步骤如下:
1. 首先,需要在代码中引入OpenSSL库的头文件和相关类型定义:
```
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <openssl/sha.h>
```
2. 然后,定义一个函数,该函数接受一个字符串和一个密钥作为输入参数,返回一个经过hmac_sha1加密后的结果。函数定义如下:
```
char* hmac_sha1(const char* data, const char* key) {
unsigned char result[EVP_MAX_MD_SIZE];
unsigned int result_len;
// 将data字符串中的换行符替换为'\0',以便在后面计算长度时正确计算
int len = strlen(data);
for (int i = 0; i < len; i++) {
if (data[i] == '\n') {
((char*)data)[i] = '\0';
}
}
// 进行hmac_sha1加密
HMAC(EVP_sha1(), key, strlen(key), (unsigned char*)data, strlen(data), result, &result_len);
// 将加密后的结果转换为16进制字符串
char* hex_result = (char*)malloc(result_len * 2 + 1);
for (int i = 0; i < result_len; i++) {
sprintf(&hex_result[i * 2], "%02x", (unsigned int)result[i]);
}
hex_result[result_len * 2] = '\0';
return hex_result;
}
```
3. 在主函数中调用hmac_sha1函数进行加密,如下所示:
```
int main() {
char* key = "mykey";
char* data = "string\nwith\nmultiple\nline\nbreaks";
char* result = hmac_sha1(data, key);
printf("%s\n", result);
free(result);
return 0;
}
```
输出结果为:
```
1d0ce0e2f8f8e8c071faa4aa28e4b3d6e8a07b51
```
至此,就完成了对中间带多个换行符的字符串进行带key的加密的实现。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)