你好对话和开发商,
我想用DA14580加密和解密的用户数据。这是很好的使用gapm_use_enc_block_cmd和加密修正。
当我按照UM-B-15,附录H,有什么不对的加密和解密。我试图如所描述的,被称为aes_init(假的,aes_done_cb)使用测试代码arch_main.c;和aes_operation(键,的sizeof(键),明文,的sizeof(明文),aes_out,16,1,aes_done_cb,1);(加密)和aes_operation(键,的sizeof(键),aes_out,16,aes_result,16,0,aes_done_cb,0);(解密)。
加密数据与使用GAPM_USE_ENC_BLOCK_CMD不同。---使用相同的密钥和明文。为了解密,所有输出都是来自相同密钥和加密数据的0,无法获得纯版。
请告知如何使用S / W解密。
由于信息非常有限,我不知道如何设置aes_flag - 我尝试了0和1,结果。iv i在阵列中使用0的IV由于芯片没有IV ...
sw_aes.c支持AES-CBC,即能解密通过使用gapm_use_enc_block_cmd加密的数据?
谢谢,
设备:
你好。
硬件加密仅支持AES加密操作;不是AES解密操作。因此,如果要使用AES解密,您必须使用SW实现进行解密操作。要包含它,您必须定义USE_AES_DECRYPT(请参阅AES_API.C)。如果未定义,解密将无法正常工作。
请注意,有操作的许多块加密模式,使得使用AES的:AES-CBC,AES-CTR,AES-EBC等(见https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)。硬件模块仅支持原始AES加密操作,该操作采用128位密钥和128位明文,并产生128位的密文。另请注意,我认为输出字节因某种原因而逆转。AES_operation API函数似乎使用AES-EBC,除非您知道您在做什么,否则永远不会直接使用。
作为对DA14580我一个通用的密码会建议AES-CTR因为有你只需要AES加密操作,而不是AES-解密操作,这意味着你不需要使用SW AES解密。
这就是说,你必须在你想要使用的AES API的方式使用GAPM_USE_ENC_BLOCK_CMD任何问题,UM-B-15,而不是申报?在我看来,GAPM_USE_ENC_BLOCK_CMD是使用AES的首选方式。
例如,使用AES-CTR,例如将明文的前12个字节设置为对您加密的每条消息(随机数或序列号)的每条消息应该不同的once / IV。其他4个字节被设置为对您加密相同消息的每个16个字节的数据增加的计数器。然后XOR与纯粹的pinipherText,与Nonce / IV一起是您的最终加密数据。要解密,请使用存储的once / IV和XOR与加密文本一起重复AES操作以恢复明文。图片at.https://en.wikipedia.org/wiki/block_cipher_mode_of_operation_28 ...把它描述得很好。
在什么样的目的,你使用AES什么样的方式/呢?您是否使用它通过加密的空气或发送数据加密/解密存储在闪存/ EEPROM?
感谢您分享您的体验。
我用分钟修改为博思encrytipn和decrytion开放源代码,这工作非常出色。我也试过GAPM_USE_ENC_BLOCK_CMD,效果很不错了。
我跟着UM-B-15,AppendixH,这是onlt AES相关文档。使用aes_operation功能,我不能得到encyption右声道输出,以及decyption不行。我会尝试定义USE_AES_DECRYPT。如果同比AVE请给我更多的aaplication笔记。
AES EBC为我所用的东西。加密的数据usese两个以上的空气和在存储器中。
感谢您分享您的体验。
我用分钟修改为博思encrytipn和decrytion开放源代码,这工作非常出色。我也试过GAPM_USE_ENC_BLOCK_CMD,效果很不错了。
我跟着UM-B-15,AppendixH,这是onlt AES相关文档。使用aes_operation功能,我不能得到encyption右声道输出,以及decyption不行。我会尝试定义USE_AES_DECRYPT。如果同比AVE请给我更多的aaplication笔记。
AES EBC为我所用的东西。加密的数据usese两个以上的空气和在存储器中。
这些API在非标及非一致的方式作出。键/明文/ enctext有时反转,有时没有。
这是它应该如何进行加密的16个字节的块时,可以使用:
关键aes_operation_enc:不反转
key gapm_use_enc_block:反转
输入明文aes_operation ENC:反转
输入enctext gapm_use_enc_block:verdered
输出enctext aes_operation ENC:不反转
输出enctext gapm_use_enc_block:反转
当解密:
输入enctext aes_operation 12月:不反转
输出明文AES_operation DEC:反转
嗨Joacimwe:
我有一个问题关于DA14580 AES函数,我想使用AES-128加密用户数据,问题是DA14580 AES加密输出数据与OpenSSL Lib加密输出数据有差异,它像DA14580 AES加密输出错误的数据,我不要为什么。
我的SDK版本是5.04,这是我的代码:
uint8_t xor_key [16];
uint8_t aes_temp [16] = {是0xAB,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA,和0xAA};
aes_set_key(aes_temp,&键);
aes_enc_dec(aes_temp,xor_key,&键,BLE_SAFE_MASK);
输出xor_key值是:AF C6 6C 38 7E AF E7 CB 64 99 E4 70 C2 56 29 DD
但我使用OpenSSL Lib加密相同的AES_TEMP [16],输出为:B8 0E 69 E1 72 74 75 5C 5D C0 FE EA 7F 5F 66 DF
我改变aes_enc_dec功能:
INT aes_enc_dec(无符号字符*中,无符号字符*出来,AES_KEY *键,无符号的字符ble_flags)
{
in j;
if(ble_flags&ble_safe_mask)
rwip_schedule();
//检查与SMPM避免冲突/ LLM
如果(smpm_env.operation &&((结构smp_cmd *)(smpm_env.operation)) - >操作== GAPM_USE_ENC_BLOCK)
返回-1;
SetWord32(BLE_AESKEY31_0_REG,键 - > KS [3]);
SetWord32(BLE_AESKEY63_32_REG,键 - > KS [2]);
SetWord32(BLE_AESKEY95_64_REG,键 - > KS [1]);
SetWord32(BLE_AESKEY127_96_REG,键 - > KS [0]);
对于(j = 0;Ĵ<16; J ++){
*(挥发性UINT8 *)(UINT32)(0x80000 + jump_table_struct [offset_em_enc_plain] + j)的=在[J];
}
//设置指针上的数据加密。
setword32(ble_aesptr_reg,jump_table_struct [offset_em_enc_plain]);
//开始HW块
SetWord32(BLE_AESCNTL_REG,1);
而(GetWord32(BLE_AESCNTL_REG)== 1)
if(ble_flags&ble_safe_mask)
rwip_schedule();
对于(j = 0;Ĵ<16; J ++){
出[J] = *(挥发性UINT8 *)(UINT32)(0x80000 + jump_table_struct [offset_em_enc_cipher] + j)的;
}
返回0;
}
我不知道为什么会发生这种情况
嗨内核,
显然,您使用的是相同的数据,密钥和纯文本,请尝试将纯文本排列在不同的变量数组分配,并把数据颠倒过来,这样你会得到正确的结果。
谢谢mt_dialog.
您应该在此处使用我的安全加密功能:
https://support.dialog-semiconductor.com/feature-request-easy-encblock
您应该与openssl一起获得相同的结果。