如何在C ++中为BYTE数组添加填充?

时间:2016-11-19 12:47:52

标签: c++ arrays encryption aes padding

我正在用C ++进行AES加密试验,我在GitHub上发现了AES的实现,问题是输入字节数组的大小应该可以被16整除,并且我的数据在大多数时间内都不会满足这个要求。我想添加填充(0-s到数组的末尾),直到大小可以被16整除。

我有一个计算最接近大小的函数,但我不知道如何为数组添加填充。

     function loadArticles ()      {        
     var request = new XMLHttpRequest();   
     request.onreadystatechange = function (){   
         if (request.readyState === XMLHttpRequest.DONE){   
          var articles = document.getElementById('articles');  
            if (request.status === 200) {  
              var articleData = JSON.parse(this.responseText);  
                for (var i=0; i< articleData.length; i++) {  
         var content = `<div class="container">
          <div class="row">
       <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
             <div class="post-preview">
                  <a href="/${articleData[i].title}">
                      <h2 class="post-title">
                       ${articleData[i].heading}</h2>
                       <h3 class="post-subtitle">
                       ${articleData[i].subtitle}</h3>
                      </a>
       <p class="post-meta">Posted by <a href="#">${articleData[i].author}</a> on Date ${articleData.date[i].toDateString()}</p>
       </div>
        </div>
        </div>
        </div>`;
            }
            articles.innerHTML = content;
        } else {
            articles.innerHTML('Oops! Could not load all articles!')
        }
    }
};

输入和调用是:

{{1}}

1 个答案:

答案 0 :(得分:1)

大多数加密库会为您添加填充。如果你想自己做,那么:

  1. 计算您需要的填充量。

  2. 由于C数组不可扩展,因此您需要创建一个新数组来同时保存明文和填充。

  3. PKCS#7填充很常见,所以除非你有理由不这样做,否则选择它。

  4. 将明文后跟填充复制到新数组中。

  5. 将新阵列传递给AES进行加密;它现在可以被整除成块。

  6. 在解密时检查填充是否存在并正确形成。格式错误的填充表示存在问题。

  7. 删除填充并返回解密的文本。