当前位置: 首页 > news >正文

想自己做网站做推广外国网站的浏览器

想自己做网站做推广,外国网站的浏览器,免费注册营业执照,好医生网站继续教育网一、PRESENT算法介绍 PRESENT是一种超轻量级分组密码算法#xff0c;由Bogdanov等人在2007年提出#xff0c;专门为资源受限环境如RFID标签和传感器网络设计。该算法在硬件实现上仅需1570个门等效电路(GE)#xff0c;在保持较高安全性的同时实现了极小的硬件占用空间。PRES…一、PRESENT算法介绍 PRESENT是一种超轻量级分组密码算法由Bogdanov等人在2007年提出专门为资源受限环境如RFID标签和传感器网络设计。该算法在硬件实现上仅需1570个门等效电路(GE)在保持较高安全性的同时实现了极小的硬件占用空间。PRESENT标准文档下载地址为PRESENT: An Ultra-Lightweight Block Cipher。 PRESENT采用SPN结构分组长度为64位支持80位和128位两种密钥长度。算法包含31轮加密操作每轮由轮密钥加、S盒替换和P盒置换三个步骤组成。其中S盒是一个4位输入输出的非线性变换P盒则是一个64位的线性置换层。这种简洁的结构使得PRESENT在硬件实现上非常高效。 安全性方面PRESENT设计时充分考虑了差分分析和线性分析等攻击方法。通过理论证明任何5轮差分特征至少包含10个活跃S盒25轮差分特征的概率上限为线性分析则需约个已知明文才能成功攻击这些安全指标完全满足轻量级应用场景的需求。 二、C语言实现 我们提供的C代码完整实现了PRESENT-80算法包括加密、解密和密钥扩展功能。实现中定义了几个关键组件 首先定义了算法核心的S盒和P盒置换表。S盒是一个16元素的查找表实现非线性变换P盒则定义了64位状态的置换规则。代码中同时包含了正向和反向的S盒/P盒分别用于加密和解密过程。 present_permutation函数实现了通用的置换操作根据传入的置换规则表对输入数据进行重排。这个函数被P盒置换(PSub)和逆P盒置换(InvPSub)复用通过不同的置换规则表实现不同的置换效果。 密钥扩展部分(present_key_expansion和keyUpdate)实现了80位主密钥到32个轮密钥的派生过程。每轮密钥通过旋转、S盒变换和轮计数器异或等操作生成确保了密钥材料的充分混淆。 加密过程(present_encrypt_block)遵循算法标准结构31轮迭代处理每轮包含轮密钥加、S盒替换和P盒置换最后再进行一次轮密钥加作为后处理。解密过程(present_decrypt_block)则逆向执行这些操作。 代码中还包含了四个测试用例验证了实现与标准测试向量的正确性。这些测试用例来自于标准文档覆盖了全零、全一的明文和密钥组合能够有效验证算法的基本功能。 #includestdio.h #includestdint.hstatic const uint8_t present_sbox[16] {0xC, 0x5, 0x6, 0xB, 0x9, 0x0, 0xA, 0xD, 0x3, 0xE, 0xF, 0x8, 0x4, 0x7, 0x1,0x2}; static const uint8_t present_inv_sbox[16] {0x5, 0xE, 0xF, 0x8, 0xC, 0x1, 0x2, 0xD, 0xB, 0x4, 0x6, 0x3, 0x0, 0x7, 0x9,0xA};static const uint8_t present_pbox[64] {0, 4, 8, 12, 16, 20, 24, 28,32, 36, 40, 44, 48, 52, 56, 60,1, 5, 9, 13, 17, 21, 25, 29,33, 37, 41, 45, 49, 53, 57, 61,2, 6, 10, 14, 18, 22, 26, 30,34, 38, 42, 46, 50, 54, 58, 62,3, 7, 11, 15, 19, 23, 27, 31,35, 39, 43, 47, 51, 55, 59, 63 };static const uint8_t present_inv_pbox[64] {0, 16, 32, 48, 1, 17, 33, 49,2, 18, 34, 50, 3, 19, 35, 51,4, 20, 36, 52, 5, 21, 37, 53,6, 22, 38, 54, 7, 23, 39, 55,8, 24, 40, 56, 9, 25, 41, 57,10, 26, 42, 58, 11, 27, 43, 59,12, 28, 44, 60, 13, 29, 45, 61,14, 30, 46, 62, 15, 31, 47, 63 };void present_permutation(const uint8_t *src, uint8_t *res, const uint8_t *rule, uint8_t len) {uint8_t dest_pos, dest_bit;for (uint8_t i 0; i len; i) {res[i] 0;for (uint8_t j 0; j 8; j) {dest_pos rule[8 * i j];dest_bit (src[dest_pos 3] (7 - (dest_pos 0x07))) 0x01;res[i] res[i] | (dest_bit (7 - j));}} }void addRoundKey(uint8_t *state, const uint8_t *ikey, uint8_t r) {for (uint8_t i 0; i 8; i) {state[i] ^ ikey[8 * r i];} }void SubByte(uint8_t *state) {for (int i 0; i 8; i) {uint8_t s0 present_sbox[state[i] 0xf];uint8_t s1 present_sbox[state[i] 4];state[i] s0 | s1 4;} }void InvSubByte(uint8_t *state) {for (int i 0; i 8; i) {uint8_t s0 present_inv_sbox[state[i] 0xf];uint8_t s1 present_inv_sbox[state[i] 4];state[i] s0 | s1 4;} }void PSub(uint8_t *state) {uint8_t tmp[8] {0};for (uint8_t i 0; i 8; i) {tmp[i] state[i];}present_permutation(tmp, state, present_pbox, 8); }void InvPSub(uint8_t *state) {uint8_t tmp[8] {0};for (uint8_t i 0; i 8; i) {tmp[i] state[i];}present_permutation(tmp, state, present_inv_pbox, 8); }void keyUpdate(uint8_t *key, uint8_t rc) {uint8_t k[10] {key[7] 5 | key[8] 3, key[8] 5 | key[9] 3, key[9] 5 | key[0] 3, key[0] 5 | key[1] 3,key[1] 5 | key[2] 3,key[2] 5 | key[3] 3, key[3] 5 | key[4] 3, key[4] 5 | key[5] 3, key[5] 5 | key[6] 3,key[6] 5 | key[7] 3};k[0] (k[0] 0xf) | (present_sbox[k[0] 4] 4);rc rc 0x1f;k[7] ^ rc 1;k[8] ^ rc 7;for (uint8_t i 0; i 10; i) {key[i] k[i];} }void present_key_expansion(const uint8_t *mkey, uint8_t *ikey) {uint8_t mk[10];for (uint8_t i 0; i 10; i) {mk[i] mkey[i];ikey[i] mkey[i];}for (uint8_t i 1; i 32; i) {keyUpdate(mk, i);for (uint8_t j 0; j 8; j) {ikey[8 * i j] mk[j];}} }void present_encrypt_block(const uint8_t *plain, uint8_t *cipher, uint8_t *ikey) {uint8_t state[8];for (uint8_t i 0; i 8; i) {state[i] plain[i];}for (int r 1; r 32; r) {addRoundKey(state, ikey, r - 1);SubByte(state);PSub(state);}addRoundKey(state, ikey, 31);for (uint8_t i 0; i 8; i) {cipher[i] state[i];} }void present_decrypt_block(const uint8_t *cipher, uint8_t *plain, uint8_t *ikey) {uint8_t state[8];for (uint8_t i 0; i 4; i) {state[i] cipher[3 - i];state[i 4] cipher[7 - i];}for (int i 31; i 1; i--) {addRoundKey(state, ikey, i);InvPSub(state);InvSubByte(state);}addRoundKey(state, ikey, 0);for (uint8_t i 0; i 4; i) {plain[i] state[3 - i];plain[i 4] state[7 - i];} }void print_data(uint8_t *data, int data_len, const char *name) {printf(\t%s: , name);for (int i 0; i data_len; i) {printf(%02x , data[i]);}printf(\n); }void test_case1() {printf(test case 1:\n);uint8_t mkey[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};uint8_t plain[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};uint8_t ikey[256] {0};uint8_t cipher[8] {0};print_data(plain, 10, plaintext);print_data(mkey, 8, mkey);present_key_expansion(mkey, ikey);present_encrypt_block(plain, cipher, ikey);print_data(cipher, 8, ciphertext); }void test_case2() {printf(test case 2:\n);uint8_t mkey[] {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};uint8_t plain[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};uint8_t ikey[256] {0};uint8_t cipher[8] {0};print_data(plain, 10, plaintext);print_data(mkey, 8, mkey);present_key_expansion(mkey, ikey);present_encrypt_block(plain, cipher, ikey);print_data(cipher, 8, ciphertext); }void test_case3() {printf(test case 3:\n);uint8_t mkey[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};uint8_t plain[] {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};uint8_t ikey[256] {0};uint8_t cipher[8] {0};print_data(plain, 10, plaintext);print_data(mkey, 8, mkey);present_key_expansion(mkey, ikey);present_encrypt_block(plain, cipher, ikey);print_data(cipher, 8, ciphertext); }void test_case4() {printf(test case 4:\n);uint8_t mkey[] {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};uint8_t plain[] {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};uint8_t ikey[256] {0};uint8_t cipher[8] {0};print_data(plain, 10, plaintext);print_data(mkey, 8, mkey);present_key_expansion(mkey, ikey);present_encrypt_block(plain, cipher, ikey);print_data(cipher, 8, ciphertext); }int main() {test_case1();test_case2();test_case3();test_case4();return 0; } 三、总结 PRESENT算法通过精心设计的简洁结构在资源受限环境中实现了安全性与效率的良好平衡。其硬件友好的特性使其成为物联网安全领域的理想选择。提供的C语言实现完整展现了算法的工作流程模块化设计清晰便于理解和移植。 这种轻量级密码算法代表了密码学在物联网时代的发展方向即在有限资源下提供足够的安全保障。随着物联网设备的普及类似PRESENT这样的高效密码算法将发挥越来越重要的作用。我们的代码实现不仅可用于学术研究也可应用于实际的嵌入式安全解决方案中。
http://www.hkea.cn/news/14582723/

相关文章:

  • 文山专业网站建设什么网站建设效果好
  • 论文个人网站建设品牌建设运营方案
  • 郑州网站app开发做网站要学习什么
  • 网站字体规范青岛做网站建网站
  • 网站 mipa站插画
  • 朝阳专业网站建设公司怎样进行网站开发
  • 中国电建成都设计院外贸seo网站建站
  • 如何给公司网站做优化ps做网站大小尺寸
  • 网站主要栏目wordpress 插件哪里
  • 建设门户网站的请示项目管理软件应用
  • html5单页面网站兰州市网站
  • 直播网站 咋做免费域名服务
  • 怎么自己做网站服务器惠州企业建站模板
  • 做网站简约学校网站一家专做二手手机的网站叫什么手机
  • 相机网站建设策划书如何做网站源码
  • pc网站怎么做佛山网络科技公司有哪些
  • 最超值的赣州网站建设wordpress汉化主题下载
  • 做韦恩图的在线网站cpc引流做网站cpa推广
  • 个人网站建设课程企业网站建设教学
  • 外贸公司网站建设费用 如何申请亚马逊网站建设进度计划书
  • dedecms手机网站模板安装教程河北新闻最新消息今天
  • 关于制作网站收费标准给自己家的公司做网站好做吗
  • 上海门户网站制作公司seo推广话术
  • 舟山网站建设推荐辽宁工程招标信息网
  • 触屏端网站开发织梦医院网站源码
  • 做网站编辑好还是美工好网络产品代理加盟
  • 历史文化街区和历史建筑信息平台贴心的网站优化公司
  • 网站建设小组的运营模式哪里有平面设计
  • 紫金网站建设价格网站开发第三方支付
  • 需要优化的网站有哪些网页设计与制作参考文献