java-信息安全(一)-BASE64,MD5,SHA,HMAC,RIPEMD算法

论坛 期权论坛     
选择匿名的用户   2021-6-2 17:53   552   0
<div class="blogpost-body" id="cnblogs_post_body">
<h1>概述</h1>
<p>信息安全基本概念:</p>
<ul><li>BASE64 编码格式</li><li>Base58 编码</li><li>MD5(Message Digest algorithm 5,信息摘要算法)</li><li>SHA(Secure Hash Algorithm,安全散列算法)</li><li>HMAC(Hash Message Authentication Code,散列消息鉴别码)</li><li>RIPEMD(RACE Integrity Primitives Evaluation Message Digest,RACE原始完整性校验消息摘要)</li></ul>
<h2>Base64</h2>
<p>  按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) </p>
<p>使用:推荐使用 org.apache.commons.codec.binary.Base64</p>
<p align="left" class="medium"><strong>Base64编码说明</strong></p>
<p align="left" class="medium">  Base64编码要求把<span style="color:#ff0000;">3个8位字节(3*8&#61;24)转化为4个6位的字节(4*6&#61;24),之后在6位的前面补两个0,形成8位一个字节的形式</span>。 如果剩下的字符不足3个字节,则用0填充,输出字符使用&#39;&#61;&#39;,因此编码后输出的文本末尾可能会出现1或2个&#39;&#61;&#39;。</p>
<p align="left" class="medium">  为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6&#61;64,这也是Base64名称的由来。</p>
<h2 class="medium">Base64编码表</h2>
<p> </p>
<table class="mtable"><tbody><tr><th>码值</th><th>字符</th><td rowspan="18"> </td><th>码值</th><th>字符</th><td rowspan="18"> </td><th>码值</th><th>字符</th><td rowspan="18"> </td><th>码值</th><th>字符</th></tr><tr><td>0</td><td>A</td><td>16</td><td>Q</td><td>32</td><td>g</td><td>48</td><td>w</td></tr><tr><td>1</td><td>B</td><td>17</td><td>R</td><td>33</td><td>h</td><td>49</td><td>x</td></tr><tr><td>2</td><td>C</td><td>18</td><td>S</td><td>34</td><td>i</td><td>50</td><td>y</td></tr><tr><td>3</td><td>D</td><td>19</td><td>T</td><td>35</td><td>j</td><td>51</td><td>z</td></tr><tr><td>4</td><td>E</td><td>20</td><td>U</td><td>36</td><td>k</td><td>52</td><td>0</td></tr><tr><td>5</td><td>F</td><td>21</td><td>V</td><td>37</td><td>l</td><td>53</td><td>1</td></tr><tr><td>6</td><td>G</td><td>22</td><td>W</td><td>38</td><td>m</td><td>54</td><td>2</td></tr><tr><td>7</td><td>H</td><td>23</td><td>X</td><td>39</td><td>n</td><td>55</td><td>3</td></tr><tr><td>8</td><td>I</td><td>24</td><td>Y</td><td>40</td><td>o</td><td>56</td><td>4</td></tr><tr><td>9</td><td>J</td><td>25</td><td>Z</td><td>41</td><td>p</td><td>57</td><td>5</td></tr><tr><td>10</td><td>K</td><td>26</td><td>a</td><td>42</td><td>q</td><td>58</td><td>6</td></tr><tr><td>11</td><td>L</td><td>27</td><td>b</td><td>43</td><td>r</td><td>59</td><td>7</td></tr><tr><td>12</td><td>M</td><td>28</td><td>c</td><td>44</td><td>s</td><td>60</td><td>8</td></tr><tr><td>13</td><td>N</td><td>29</td><td>d</td><td>45</td><td>t</td><td>61</td><td>9</td></tr><tr><td>14</td><td>O</td><td>30</td><td>e</td><td>46</td><td>u</td><td>62</td><td>&#43;</td></tr><tr><td>15</td><td>P</td><td>31</td><td>f</td><td>47</td><td>v</td><td>63</td><td>/<br><br></td></tr></tbody></table>
<p> </p>
<div class="para-title level-2">
  <h2 class="title-text">原理</h2>
  <a class="edit-icon j-edit-link"><span class="cmn-icon wiki-lemma-icons wiki-lemma-icons_edit-lemma">编辑</span></a>
</div>
<div class="para">
  转码过程例子:
</div>
<div class="para">
  3*8&#61;4*6
</div>
<div class="para">
  内存1个字节占8位
</div>
<div class="para">
  转前: s 1 3
</div>
<div class="para">
  先转成ascii:对应 115 49 51
</div>
<div class="para">
  2进制: 01110011 00110001 00110011
</div>
<div class="para">
  6个一组(4组) 011100110011000100110011
</div>
<div class="para">
  然后才有后面的 011100 110011 000100 110011
</div>
<div class="para">
  然后计算机是8位8位的存数 6不够,自动就补两个高位0了
</div>
<div class="para">
  所有有了 高位补0
</div>
<div class="para">
  科学计算器输入 00011100 00110011 00000100 00110011
</div>
<div class="para">
  得到 28 51 4 51
</div>
<div class="para">
  查对下照表 c z E z
</div>
<div class="para-title level-3">
  <h3 class="title-text">Java版</h3>
</div>
<div>
  <div class="syntaxhighlighter java" id="highlighter_955367">
   <table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">
       <div class="line number1 index0 alt2">
        1
       </div>
       <div class="line number2 index1 alt1">
        2
       </div>
       <div class="line number3 index2 alt2">
        3
       </div>
       <div class="line number4 index3 alt1">
        4
       </div>
       <div class="line number5 index4 alt2">
        5
       </div>
       <div class="line number6 index5 alt1">
        6
       </div>
       <div class="line number7 index6 alt2">
   
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP