7-141 加密

信息安全很重要,特别是密码。给定一个5位的正整数n和一个长度为5的字母构成的字符串s,加密规则很简单,字符串s的每个字符变为它后面的第k个字符,其中k是n的每一个数位上的数字。第一个字符对应n的万位上的数字,最后一个字符对应n的个位上的数字。简单起见,s中的每个字符为ABCDE中的一个。

输入格式:

测试数据有多组,处理到文件尾。每组测试数据在一行上输入非负的整数n和字符串s。

输出格式:

对于每组测试数据,在一行上输出加密后的字符串。

输入样例:

12345 ABCDE

输出样例:

BDFHJ

代码:

#include <stdio.h>
int main()
{
    int num;
    char s[6];
    while(scanf("%d %s",&num,s) != EOF){
        int w = (num/10000)%10;	//万位数字
        int q = (num/1000)%10;	//千位数字
        int b = (num/100)%10;	//百位数字
        int s1 = (num/10)%10;		//十位数字
        int g = (num/1)%10;		//个位数字
        printf("%c%c%c%c%c\n",(int)s[0]+w,(int)s[1]+q,(int)s[2]+b,(int)s[3]+s1,(int)s[4]+g);
        w=0;q=0;b=0;s1=0;g=0;
    }
    
    return 0;
}
 

 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
阿⾥云 对象存储 SDK ⽰例 ⽂档版本:20190920 对象存储 SDK ⽰例 ⽂档版本:20190920 I 法律声明....................................................................................I 通⽤约定....................................................................................I 1 SDK ⽂档简介.........................................................................1 2 Java......................................................................................2 2.1 前⾔............................................................................................................2 2.2 安装............................................................................................................3 2.3 快速⼊⻔......................................................................................................4 2.4 初始化.........................................................................................................8 2.5 存储空间....................................................................................................12 2.6 请求者付费模式...........................................................................................17 2.7 单链接限速.................................................................................................19 2.8 存储空间标签..............................................................................................21 2.9 对象标签....................................................................................................23 2.9.1 设置对象标签...................................................................................23 2.9.2 获取对象标签...................................................................................32 2.9.3 删除对象标签...................................................................................32 2.9.4 对象标签和⽣命周期管理....................................................................33 2.10 服务器端加密............................................................................................ 35 2.11 上传⽂件..................................................................................
sm4加密算法是一种对称加密算法,其加密和解密使用相同的密钥。以下是使用C语言实现sm4加密算法的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef unsigned char byte; typedef unsigned int word; #define GET_UINT32_BE(n,b,i) \ { \ (n) = ( (word) (b)[(i) ] << 24 ) \ | ( (word) (b)[(i) + 1] << 16 ) \ | ( (word) (b)[(i) + 2] << 8 ) \ | ( (word) (b)[(i) + 3] ); \ } #define PUT_UINT32_BE(n,b,i) \ { \ (b)[(i) ] = (byte) ( (n) >> 24 ); \ (b)[(i) + 1] = (byte) ( (n) >> 16 ); \ (b)[(i) + 2] = (byte) ( (n) >> 8 ); \ (b)[(i) + 3] = (byte) ( (n) ); \ } #define SBOX_TABLE_SIZE 256 #define SBOX_SIZE 16 #define SBOX_ROW_SIZE 4 #define SBOX_COL_SIZE 4 static const byte SboxTable[SBOX_TABLE_SIZE] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /*0*/ 0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05, /*1*/ 0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99, /*2*/ 0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62, /*3*/ 0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6, /*4*/ 0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8, /*5*/ 0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35, /*6*/ 0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87, /*7*/ 0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e, /*8*/ 0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1, /*9*/ 0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3, /*A*/ 0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f, /*B*/ 0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51, /*C*/ 0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8, /*D*/ 0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0, /*E*/ 0x89,0x69,0x97,0x4a,0x0c,0x96,0x77,0x7e,0x65,0xb9,0xf1,0x09,0xc5,0x6e,0xc6,0x84, /*F*/ 0x18,0xf0,0x7d,0xec,0x3a,0xdc,0x4d,0x20,0x79,0xee,0x5f,0x3e,0xd7,0xcb,0x39,0x48 }; static const word FK[4] = { 0xA3B1BAC6, 0x56AA3350, 0x677D9197, 0xB27022DC }; static const word CK[32] = { 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 }; #define ROTL(x,n) (((x) << (n)) | ((x) >> (32 - (n)))) #define L1(x) (x ^ ROTL(x, 2) ^ ROTL(x,10) ^ ROTL(x,18) ^ ROTL(x,24)) #define L2(x) (x ^ ROTL(x,13) ^ ROTL(x,23)) #define ROUND(x0,x1,x2,x3,x4,rk) \ { \ x4 = x1 ^ x2 ^ x3 ^ rk; \ x4 = L1(x4); \ x0 = x0 ^ x4; \ x4 = L2(x4); \ x1 = x1 ^ x4; \ x2 = x2 ^ x4; \ x3 = x3 ^ x4; \ } void sm4_setkey_enc(word SK[32], const byte key[16]) { word MK[4]; word k[36]; int i; GET_UINT32_BE(MK[0], key, 0); GET_UINT32_BE(MK[1], key, 4); GET_UINT32_BE(MK[2], key, 8); GET_UINT32_BE(MK[3], key, 12); k[0] = MK[0] ^ FK[0]; k[1] = MK[1] ^ FK[1]; k[2] = MK[2] ^ FK[2]; k[3] = MK[3] ^ FK[3]; for(i=0; i<32; i++) { ROUND(k[i], k[i+1], k[i+2], k[i+3], k[i+4], CK[i]); SK[i] = k[i+4]; } } void sm4_crypt_ecb(const word SK[32], int mode, int length, const byte input[], byte output[]) { word i; word ulbuf[36]; while(length > 0) { GET_UINT32_BE(ulbuf[0], input, 0); GET_UINT32_BE(ulbuf[1], input, 4); GET_UINT32_BE(ulbuf[2], input, 8); GET_UINT32_BE(ulbuf[3], input, 12); for(i=0; i<32; i++) { ROUND(ulbuf[0], ulbuf[1], ulbuf[2], ulbuf[3], ulbuf[4], SK[i]); } PUT_UINT32_BE(ulbuf[0], output, 0); PUT_UINT32_BE(ulbuf[1], output, 4); PUT_UINT32_BE(ulbuf[2], output, 8); PUT_UINT32_BE(ulbuf[3], output, 12); input += 16; output += 16; length -= 16; } } int main() { byte key[16] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10}; byte input[16] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10}; byte output[16]; word SK[32]; sm4_setkey_enc(SK, key); sm4_crypt_ecb(SK, 1, 16, input, output); printf("Input: "); for(int i=0; i<16; i++) { printf("%02x ", input[i]); } printf("\n"); printf("Output: "); for(int i=0; i<16; i++) { printf("%02x ", output[i]); } printf("\n"); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小羊 : )

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

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

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

打赏作者

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

抵扣说明:

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

余额充值