如何生成#PWD_BROWSER,例如Facebook中用到的

本文档介绍了使用AES-GCM-256加密算法并结合TweetNaCl进行二次加密的过程。通过示例展示了如何对字符串进行加解密操作,并在最后验证了数据包的正确性。关键词涉及高级加密标准和TweetNaCl库在信息安全中的应用。
摘要由CSDN通过智能技术生成

0x01、关键词:#PWD_BROWSER:5:

例子可以通过抓包得到,其核心的东西就是AES-GCM-256加密,然后将结果再用tweetnacl去加密一次,得到的就是结果。

0x02、测试

随便找个字符串测试,得到以下结果(取PWD_BROWSER:5:后面的一串):

1644559129:AdxQABgvahTjKJDfbgtDq1VfcrjExov7mSPmDkD2V0r3Lz0G8Ldt0Q/SIvY8k9Ytk2Y+bVXngNRsHkeHVNLAnpwCo/OKG24Q5ctjkR0mQenm2vgJ+gMY/L6PO09qMoG/gS84tSgwdjM8TGB7tDI=
1644559135:AdxQAHrKOIH8Ipxn6LeMSH6N30Ao1VJpQMeHOXeq/20hDj5Dx0iYoVfzPlwAG0gjI3QVPHuj1GDxUdftt3AwkN2aXCEkn9Xsq1o2h0xjpu11HXE1yXyPdKQYN8rd43sxH1kvEuHeQOxe6hOmIOc=
1644559140:AdxQAMn1fSbjS4TOMc02apOB0Okmty/+iJsjCPQA2gIhGcoMSz8YnGdQ54DpxCrfIFKTktIL8OyckOhaTdr4HwN3unpPbR3Urg3uVlJ4uWyrcVrMGBiBoXg5fK/6t7LpY/S9dgjUQ5DBuOGIPfo=
1644559144:AdxQAM/6homH43MAOHPs1wIfxUgxmIXPuIGE7TrqWCa+4iwCZoQaEA9ZIz9NCjiKN/O9UvPLh8+RbAC5cg4yXH67k0/eEP3VfwkyMTbngCSBQsn2CtazKSclqtAbOG5AI0sfGO+fW85iOAaux0Q=
1644559149:AdxQANk0vcFNJJ/9frVuOAu7+Ujp/UdIySa2ms7Cfx8i06J4ypc7UTZkjBv1BeADtol8HRZt+jTXZXbCQdZ30eZDteRzZvZBytQIC51yEf9H/V2GA/NJPrMmzTieii9I8HCk082UmgFKy1GprAA=
1644559319:AdxQAHvtKDPWZZc54HfGvZZir1O1Drmd+SlbqcAemvknKU8FN+dO3n+milv86Dg78NLn28cJznq0ZTkPoAICWlRkNMWhghezlPfHIhzu/6n158poG91NNvaLYt9fGSmid5mzVCotYCZQpa3nYhk=

0x03、最后用数据包测试

还是可以使用的,能正确返回数据包的结果!

根据需求,需要对给出的部分代码进行完善和优化,以下是一个可能的实现方案: 1. 在代码开头,定义常量和变量,用于存储密码数据的地址、有效性标志和日期时间等信息: ```c #define ADDR_SETTING_LED_PWD_DATETIME 0x8000 // 密码数据的存储地址,假设为0x8000 #define EEPROM_SETTING_LED_PWD_SIZE 70 // 密码数据总大小,假设为70字节 uint8_t pwd_valid_flag = 0xA5; // 密码有效性标志 uint8_t pwd_valid_flag_clear = 0x00; // 密码有效性标志清零值 uint8_t pwd_last_valid; // 上一个密码数据的有效性标志 uint8_t pwd_last_group = 0; // 上一个密码数据所在的组号,初始为0 uint16_t pwd_valid_address = ADDR_SETTING_LED_PWD_DATETIME + EEPROM_SETTING_LED_PWD_SIZE - 7; // 上一个密码数据的地址,初始为最后一个组的起始地址 uint8_t abTime[6]; // 当前时间,用于更新密码数据的日期时间信息 uint8_t abTime2[6]; // 读取到的密码数据的日期时间信息,用于检查写入是否成功 ``` 2. 在一个循环轮询密码数据,找到上一个有效的密码数据的组号和地址,并清除其有效性标志: ```c for (int i = 1; i <= 10; i++) { Setting_Led_Get_Pwd_LastValid(pwd_valid_address, &pwd_last_valid); if (i == 10) { pwd_last_group = 0; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag); break; } if (pwd_last_valid == pwd_valid_flag) { pwd_last_group = 10 - i; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag_clear); break; } pwd_valid_address -= 7; } ``` 3. 更新密码数据的日期时间信息,写入有效性标志和日期时间到下一个组: ```c abTime[0] = g_stcPanel.stcRTCGet.Year; abTime[1] = g_stcPanel.stcRTCGet.Month; abTime[2] = g_stcPanel.stcRTCGet.Day; abTime[3] = g_stcPanel.stcRTCGet.Hour; abTime[4] = g_stcPanel.stcRTCGet.Minute; abTime[5] = g_stcPanel.stcRTCGet.Second; Setting_Led_Set_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 7 + 1, abTime); Setting_Led_Get_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 1, abTime2); pwd_last_group = (pwd_last_group + 1) % 10; // 更新上一个密码数据所在的组号为下一个组 Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag); ``` 4. 重复上述过程,直到所有的密码数据都被写入: ```c for (int i = 1; i <= 9; i++) { pwd_valid_address -= 7; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 7, &pwd_valid_flag_clear); abTime[0] = 0; abTime[1] = 0; abTime[2] = 0; abTime[3] = 0; abTime[4] = 0; abTime[5] = 0; Setting_Led_Set_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 7 + 1, abTime); Setting_Led_Get_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 1, abTime2); pwd_last_group = (pwd_last_group + 1) % 10; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag); } ``` 完整的代码如下所示: ```c #define ADDR_SETTING_LED_PWD_DATETIME 0x8000 // 密码数据的存储地址,假设为0x8000 #define EEPROM_SETTING_LED_PWD_SIZE 70 // 密码数据总大小,假设为70字节 uint8_t pwd_valid_flag = 0xA5; // 密码有效性标志 uint8_t pwd_valid_flag_clear = 0x00; // 密码有效性标志清零值 uint8_t pwd_last_valid; // 上一个密码数据的有效性标志 uint8_t pwd_last_group = 0; // 上一个密码数据所在的组号,初始为0 uint16_t pwd_valid_address = ADDR_SETTING_LED_PWD_DATETIME + EEPROM_SETTING_LED_PWD_SIZE - 7; // 上一个密码数据的地址,初始为最后一个组的起始地址 uint8_t abTime[6]; // 当前时间,用于更新密码数据的日期时间信息 uint8_t abTime2[6]; // 读取到的密码数据的日期时间信息,用于检查写入是否成功 for (int i = 1; i <= 10; i++) { Setting_Led_Get_Pwd_LastValid(pwd_valid_address, &pwd_last_valid); if (i == 10) { pwd_last_group = 0; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag); break; } if (pwd_last_valid == pwd_valid_flag) { pwd_last_group = 10 - i; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag_clear); break; } pwd_valid_address -= 7; } abTime[0] = g_stcPanel.stcRTCGet.Year; abTime[1] = g_stcPanel.stcRTCGet.Month; abTime[2] = g_stcPanel.stcRTCGet.Day; abTime[3] = g_stcPanel.stcRTCGet.Hour; abTime[4] = g_stcPanel.stcRTCGet.Minute; abTime[5] = g_stcPanel.stcRTCGet.Second; Setting_Led_Set_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 7 + 1, abTime); Setting_Led_Get_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 1, abTime2); pwd_last_group = (pwd_last_group + 1) % 10; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag); for (int i = 1; i <= 9; i++) { pwd_valid_address -= 7; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 7, &pwd_valid_flag_clear); abTime[0] = 0; abTime[1] = 0; abTime[2] = 0; abTime[3] = 0; abTime[4] = 0; abTime[5] = 0; Setting_Led_Set_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 7 + 1, abTime); Setting_Led_Get_Pwd_DateTime(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7) + 1, abTime2); pwd_last_group = (pwd_last_group + 1) % 10; Setting_Led_Set_Pwd_Valid(ADDR_SETTING_LED_PWD_DATETIME + (pwd_last_group * 7), &pwd_valid_flag); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TMGZSQQ490574661

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

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

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

打赏作者

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

抵扣说明:

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

余额充值