历史上的今天
返回首页

历史上的今天

今天是:2024年12月20日(星期五)

正在发生

2019年12月20日 | 单片机DES加解密源程序,参数带入密钥就能加密解密了

2019-12-20 来源:51hei

单片机的DES加解密程序,参数带入密钥就能加密解密了,注意密钥,原 始数据和加密产生的数据都是8个字节的。

单片机源程序如下:

#include


//密钥:        B4 31 5B 86 9D 7D FA A2

//数据:       1F AD 61 A5 F7 19 77 14

//DES加密结果:4C 78 E9 1A F2 DA 9C D3


const uint8_t initial_tr[64] =

{

  57, 49, 41, 33, 25, 17,  9,  1,

  59, 51, 43, 35, 27, 19, 11,  3,

  61, 53, 45, 37, 29, 21, 13,  5,

  63, 55, 47, 39, 31, 23, 15,  7,

  56, 48, 40, 32, 24, 16,  8,  0,

  58, 50, 42, 34, 26, 18, 10,  2,

  60, 52, 44, 36, 28, 20, 12,  4,

  62, 54, 46, 38, 30, 22, 14,  6

};


const uint8_t final_tr[64] =

{

  39,  7, 47, 15, 55, 23, 63, 31,

  38,  6, 46, 14, 54, 22, 62, 30,

  37,  5, 45, 13, 53, 21, 61, 29,

  36,  4, 44, 12, 52, 20, 60, 28,

  35,  3, 43, 11, 51, 19, 59, 27,

  34,  2, 42, 10, 50, 18, 58, 26,

  33,  1, 41,  9, 49, 17, 57, 25,

  32,  0, 40,  8, 48, 16, 56, 24

};


const uint8_t swap[64] =

{

  33, 34, 35, 36, 37, 38, 39, 40,

  41, 42, 43, 44, 45, 46, 47, 48,

  49, 50, 51, 52, 53, 54, 55, 56,

  57, 58, 59, 60, 61, 62, 63, 64,

   1,  2,  3,  4,  5,  6,  7,  8,

   9, 10, 11, 12, 13, 14, 15, 16,

  17, 18, 19, 20, 21, 22, 23, 24,

  25, 26, 27, 28, 29, 30, 31, 32

};


const uint8_t key_tr1[56] =

{

  56, 48, 40, 32, 24, 16,  8,

   0, 57, 49, 41, 33, 25, 17,

   9,  1, 58, 50, 42, 34, 26,

  18, 10,  2, 59, 51, 43, 35,

  62, 54, 46, 38, 30, 22, 14,

   6, 61, 53, 45, 37, 29, 21,

  13,  5, 60, 52, 44, 36, 28,

  20, 12,  4, 27, 19, 11,  3

};


const uint8_t key_tr2[64] =

{

  0,  0, 13,  4, 16, 10, 23,  0,

  0,  0,  2,  9, 27, 14,  5, 20,

  0,  0, 22,  7, 18, 11,  3, 25,

  0,  0, 15,  1,  6, 26, 19, 12,

  0,  0, 40, 54, 51, 30, 36, 46,

  0,  0, 29, 47, 39, 50, 44, 32,

  0,  0, 43, 52, 48, 38, 55, 33,

  0,  0, 45, 31, 41, 49, 35, 28

};


const uint8_t etr[64] =

{

  0,  0, 31,  4,  0,  1,  2,  3,

  0,  0,  3,  8,  4,  5,  6,  7,

  0,  0,  7, 12,  8,  9, 10, 11,

  0,  0, 11, 16, 12, 13, 14, 15,

  0,  0, 15, 20, 16, 17, 18, 19,

  0,  0, 19, 24, 20, 21, 22, 23,

  0,  0, 23, 28, 24, 25, 26, 27,

  0,  0, 27,  0, 28, 29, 30, 31

};


const uint8_t ptr[32] =

{

  31, 14, 39, 44, 60, 23, 55, 36,

   4, 30, 46, 53, 12, 37, 62, 21,

   5, 15, 47, 29, 63, 54,  6, 20,

  38, 28, 61, 13, 45, 22,  7, 52

};


const uint8_t s[8][64] =

{

  {

   14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7,

    0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8,

    4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0,

   15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13

  },

  {

   15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10,

    3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5,

    0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15,

   13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9

  },

  {

   10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8,

   13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1,

   13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7,

    1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12

  },

  {

    7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15,

   13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9,

   10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4,

    3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14

  },

  {

    2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9,

   14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6,

    4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14,

   11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3

  },

  {

   12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11,

   10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8,

    9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6,

    4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7, 6,  0,  8,  13

  },

  {

    4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1,

   13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6,

    1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2,

    6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12

  },

  {

   13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7,

    1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2,

    7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8,

    2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11

  }

};


const uint8_t rots[16] =

{

  1,  1,  2,  2,  2,  2,  2,  2,  1,  2,  2,  2,  2,  2,  2,  1

};


const uint8_t bit_msk[8] =

{

  0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01

};


uint8_t DES_Encrypt_key[8];

uint8_t DES_Decrypt_key[8];

uint8_t sub_keys[16][8]; //sub_keys[16][8]

uint8_t main_key[8];


        void    des(uint8_t*, uint8_t*, uint8_t, uint8_t*);

   void  FLASH_Read_KEYS(uint8_t key_index);

static  void    transpose (uint8_t*, uint8_t*, const uint8_t*, uint8_t);

static  void    rotate_l (uint8_t*);

static  void    compute_subkeys (uint8_t*);

static  void    f (uint8_t*, uint8_t*, uint8_t*);


/************************************************************************/

/*                                                                      */

/*      Module title:           des                                     */

/*      Module type:            des mainrutine                          */

/*                                                                      */

/*      Author:                 YXH                                     */

/*      Date:                   2012-07-13                              */

/*                                                                      */

/*      Last changed by:        YXH                                     */

/*      Date:                   2012-07-13                              */

/*                                                                      */

/*      Functional Description: Encipher and decipher 64 bits string    */

推荐阅读

史海拾趣

Goldstar Electron Co Ltd公司的发展小趣事

对于27MHz晶体振荡器电路,网友可能会提出多种问题,以下是一些常见问题及其详细回答:

一、电路设计相关问题

  1. 如何设计一个简单的27MHz晶体振荡器电路?
    • 回答:设计一个简单的27MHz晶体振荡器电路通常包括晶体本身、两个反馈电容、一个或多个电阻以及可能的放大元件(如晶体管或集成电路中的振荡器部分)。例如,可以使用一个并联型晶体振荡器电路,其中晶体与两个电容形成谐振电路,并通过一个放大元件(如CMOS反相器)提供正反馈以维持振荡。具体设计可参考技术资料(如华强电子网)提供的电路图,并根据实际需要进行调整。
  2. 如何选择合适的反馈电容和电阻值?
    • 回答:反馈电容和电阻的选择对振荡器的稳定性和频率精度至关重要。电容值通常根据晶体的规格和所需的振荡频率来确定,而电阻值则用于限制放大器的增益,以防止振荡器过度放大并产生不稳定现象。选择时,建议参考晶体振荡器的数据手册或相关设计指南,并结合实验测试来找到最佳值。

二、电路性能相关问题

  1. 如何减少27MHz晶体振荡器的谐波失真?
    • 回答:谐波失真通常是由于电路中的非线性元件或设计不当引起的。为了减少谐波失真,可以采取以下措施:
      • 选择低谐波失真的晶体振荡器。
      • 在电路中添加低通滤波器以滤除高频谐波。
      • 优化电路设计,减少非线性元件的使用,并确保电路元件的匹配性。
  2. 如何提高27MHz晶体振荡器的频率稳定性?
    • 回答:频率稳定性受多种因素影响,包括晶体的物理特性、环境温度、电源电压波动等。提高频率稳定性的方法包括:
      • 选择高质量的晶体振荡器,确保其具有较低的频率漂移和温度系数。
      • 在电路中添加温度补偿电路,以抵消温度变化对频率的影响。
      • 使用稳定的电源电压,并在必要时添加电压稳压器。
      • 优化电路布局和接地设计,减少电磁干扰和噪声。

三、电路调试与测试相关问题

  1. 如何调试27MHz晶体振荡器电路以确保其正常工作?
    • 回答:调试晶体振荡器电路时,可以按照以下步骤进行:
      • 检查电路连接是否正确,确保所有元件都已正确安装。
      • 使用示波器观察振荡波形,确认其频率和幅度是否符合要求。
      • 调整反馈电容和电阻值,以优化振荡器的性能和稳定性。
      • 检查电源电压和电流是否稳定,并调整至推荐值。
      • 如果发现谐波失真或其他问题,根据具体情况采取相应的解决措施。
  2. 如何测试27MHz晶体振荡器的输出频率和相位噪声?
    • 回答:测试晶体振荡器的输出频率和相位噪声通常需要使用专业的测试设备,如频率计和相位噪声分析仪。测试时,将振荡器的输出连接到测试设备的输入端,并设置适当的测试参数。通过测试设备可以准确测量振荡器的输出频率和相位噪声水平,从而评估其性能是否符合要求。

四、其他常见问题

  1. 27MHz晶体振荡器适用于哪些应用场景?
    • 回答:27MHz晶体振荡器由于其较高的频率和较好的稳定性,广泛应用于无线通信、雷达系统、电子测量仪器等领域。在这些应用场景中,晶体振荡器作为时钟源或频率基准,为系统提供稳定的频率信号。
  2. 如何延长27MHz晶体振荡器的使用寿命?
    • 回答:延长晶体振荡器的使用寿命需要注意以下几点:
      • 避免在极端温度或湿度条件下使用。
      • 保持电源电压稳定,避免频繁波动。
      • 定期检查电路连接和元件状态,及时更换损坏的元件。
      • 避免机械冲击和振动对晶体振荡器的影响。
      • 选择质量可靠、性能稳定的晶体振荡器产品。
ABB Group公司的发展小趣事

ABB Group是一家全球性的工程技术公司,提供电力和自动化技术解决方案。以下是该公司发展的五个相关故事:

  1. 公司成立和早期发展: ABB Group的前身可以追溯到1883年,当时由瑞士的Brown, Boveri & Cie (BBC)和瑞典的ASEA公司合并成立。这个合并创造了一个跨国电气工程公司,专注于发电机、电气传动和电力系统的设计和制造。该公司成立后迅速扩展了国际业务,并在世界各地建立了分支机构和生产基地。

  2. 技术创新和产品多样化: ABB Group一直致力于技术创新,并不断推出新产品和解决方案,以满足客户的需求。公司在电力输送、工业自动化、机器人技术等领域拥有丰富的经验和专业知识,为各种行业提供了全面的电力和自动化解决方案。

  3. 国际化战略和全球扩张: ABB Group通过收购、合并和战略合作,加速了在全球范围内的扩张。公司在100多个国家设有分支机构和办事处,形成了覆盖全球的销售和服务网络。这种国际化战略使ABB能够更好地满足不同国家和地区客户的需求。

  4. 可持续发展和环保责任: ABB Group致力于推动可持续发展和环保责任,在产品设计、生产和运营过程中注重减少能源消耗和减排。公司积极推动清洁能源和智能电网的发展,为全球的环境保护和可持续发展做出贡献。

  5. 未来展望和发展方向: ABB Group将继续致力于技术创新和市场拓展,加强在电力和自动化领域的领先地位。公司将加大在数字化技术和人工智能领域的投入,推动工业智能化和数字化转型,为客户提供更智能、更高效的解决方案。

DBLECTRO公司的发展小趣事

进入21世纪后,随着全球对环保和可持续发展的关注度不断提高,迪贝电子也积极响应这一趋势,将环保和社会责任融入到企业的经营理念中。公司投入大量资金研发更加环保、节能的产品,并积极参与各种环保公益活动。同时,迪贝电子还积极推广绿色制造理念,通过优化生产流程、降低能耗和减少废弃物排放等措施,实现了企业的可持续发展。

AdaptivEnergy公司的发展小趣事

1997年,迪贝电子在上海正式成立,标志着这家专注于环境感知技术和气体检测及分析领域的创新企业正式进入中国市场。当时,中国的环保法规日益严格,对气体排放的监控和管理要求也不断提高。迪贝电子凭借其在该领域的深厚积累和技术实力,迅速在市场上推出了一系列高质量的气体检测和分析仪器。这些产品以其准确性、稳定性和易用性受到了用户的广泛好评,为迪贝电子在中国市场的快速发展奠定了坚实的基础。

E-San Electronic Co Ltd公司的发展小趣事

在市场竞争日益激烈的情况下,E-San Electronic Co Ltd积极寻求市场拓展的新策略。公司通过与国内外知名企业的合作,成功进入了国际市场。同时,公司还加大了对新兴市场的开拓力度,通过参加各种国际展会和商务活动,提升了品牌知名度和影响力。此外,公司还积极探索线上线下相结合的销售模式,通过电商平台和社交媒体等新兴渠道拓展销售渠道。

BULGIN公司的发展小趣事

BULGIN公司的历史可以追溯到1923年,当时A.F.Bulgin先生和他的同伴在英国创立了A.F.Bulgin有限公司。公司专注于无线电电子零件的制造与生产,凭借产品的优质口碑,BULGIN的品牌逐渐广为人知。随着订单的不断增加,公司迅速成长,并在二战前已经拥有了当时最先进的现代化大规模生产线。

问答坊 | AI 解惑

基于DSP的高动态GPS接收机关键技术讨论

GPS是美国建立的高精度全球卫星定位导航系统,在陆地、海洋、航空和航天等领域有着广泛的应用。而高动态GPS接收机则可应用于导弹、卫星、飞机导航等许多场合,但由于高动态GPS接收机涉及军工等敏感领域,故国外的相关技术或产品对我国是封锁的,有 ...…

查看全部问答>

15075019

老师好! 我成功了!!!~~…

查看全部问答>

飞思卡尔09深圳FTF之行好资料,不看后悔,全部免费

借人气给大家分享一个好资料——飞思卡尔09FTF这些资料都是EEWORLD参加了飞思卡尔今年八月底在深圳举办的FTF活动带回的,非常有价值,也非常难得! 本来把他们都分门别类的放在各个应用技术专区了,很多人都没有发现,所以在此借人气,把这些资料 ...…

查看全部问答>

PCB的铜线有寄生电感,这个电感量如何估计,

朋友做个项目发现PCB寄生电感严得影响了电路的可靠性,可是板子都做出来,有没有什么方法可以补救啊? 望高手指点…

查看全部问答>

关于AVStream minidiver DMA 支持的物理内存块大小问题

调试driver studio V3.1中的hwcap例子,发现AVStream把每帧图像缓冲区分成若干大小为4K Byte的mapping items,每个mapping item描述一块连续物理内存,每块内存大小只有4KB。所有这些内存块的虚拟地址是可以连续串联起来的,物理地址是分散的。 根 ...…

查看全部问答>

stm32bootloader问题

                                 stm32 bootloader串口升级代码 只能用串口1吗? 用串口2可以不?…

查看全部问答>

上传两篇MSP-EXP430FR5739实验板套件的使用文档

给大家上传两份MSP-EXP430FR5739实验板套件的使用文档。零积分下载,以备查用。…

查看全部问答>

MSP430F5438 ADC12加快问题

先描述一下情况:我在做一个ADC12的使用,原先扫描的数据为32(行)*24(列)*50(帧),采用的ADC12配置为12位精度,采样256个时钟,序列单次扫描,代码如下:  P6SEL = 0x81;           ...…

查看全部问答>

【设计工具】用FPGA动态探头与数字VSA对DSP设计实时分析

随着 FPGA 在数字通信设计领域(蜂窝基站、卫星通信和雷达)的高性能信号处理电路中成为可行的选择,分析和调试工具必须包括能帮助您在最短时间内得到电路最佳性能的新技术。   虽然现在已经有多种连接仿真与射频模拟信号的信号分析工 ...…

查看全部问答>

求助,atmega128 spi通信无法获得正确的反馈

手上在做一个用atmega128通过spi控制一个CCD模块的东西,但是从SPDR中读取的反馈始终不对。程序很短,个人感觉没有什么问题。希望各路大神能帮忙看看。SS片选悬空。#include <mega128.h>#include<delay.h>#define FLAG PINB.4unsigned char ...…

查看全部问答>