忘了提醒一下,Demo应用的根密码是1234;
具体文件加密方式参考“changelog.txt”:
“HMAC-SHA256”的输入密钥为:
static __CONST char s_hmac_key[] = "\r\n"
"\r\n"
"献给老婆的28岁生日,祝老婆永远年轻漂亮!\r\n"
"2015-8-30\r\n";
文件创建日期为32位整数,大端格式;
具体文件组织形式如下,如果知道根密钥,可手动解密"sbx"文件:
如果忘了根密钥,可以考虑暴力解"sbox_hdr_t",从而得到根密钥(至于要多久,参考标准AES256安全强度和SHA256逆运算可能性)
class CSBoxFile
{
public:
typedef struct __sbox_list_t {
uint8 next[4]; // 0x00-0x03: 下一盒子所在文件地址
uint8 prev[4]; // 0x04-0x07: 上一盒子所在文件地址
}sbox_list_t;
public:
typedef struct __file_hdr_t {
uint8 sign[3]; // 0x00-0x02: 文件标志:固定为sbx
uint8 version; // 0x03-0x03: 文件版本
uint8 time_create[4]; // 0x04-0x07: 文件创建时间
uint8 reserve[6]; // 0x08-0x0D: 保留空间(固定为0)
uint8 desc_size[2]; // 0x0E-0x0F: 文件描述域字节数(random:mac)
// ---------- 文件数据描述及访问日志(加密保存)
uint8 random[8]; // 0x10-0x17: 随机填充值
uint8 recycle_list[4]; // 0x18-0x1B: 安全数据盒回收地址
uint8 recycle_count[4]; // 0x1C-0x1F: 安全数据盒回收计数器
sbox_list_t sbox_list; // 0x20-0x27: 安全数据盒链表根节点
uint8 sbox_count[4]; // 0x28-0x2B: 安全数据盒计数器
uint8 sbox_size[2]; // 0x2C-0x2D: 安全数据盒单元大小
uint8 reserve2[1]; // 0x2E-0x2E: 保留空间(固定为0)
uint8 log_index; // 0x2F-0x2F: 文件访问记录索引
uint8 time_access[12][4]; // 0x30-0x5F: 最近12次文件访问时间
uint8 remark[1]; // ---------- 文件备注数据
// uint8 hash[32]; // ---------- hash256(file_hdr_t)
}file_hdr_t;
public:
typedef struct __sbox_hdr_t {
sbox_list_t list; // 0x00-0x07: 安全数据盒子链表节点
uint8 list_inv[8]; // 0x08-0x0F: 链表数据反值(校验值)
uint8 seed[16]; // 0x10-0x1F: 本盒子数据密钥种子
uint8 crc[2]; // 0x20-0x21: 本盒子数据CRC16校验值(x^16 + x^15 + x^2 + 1)
uint8 len[2]; // 0x22-0x23: 本盒子数据有效长度
uint8 data[1/*len*/]; // 0x24- END: 本盒子数据存储空间
}sbox_hdr_t;
}
|