import java.security.MessageDigest;
 
public class EncryptExample {
public static void main(String[] args) {
String password = "secret";
String algorithm = "SHA";

byte[] plainText = password.getBytes();

MessageDigest md = null;

try {
md = MessageDigest.getInstance(algorithm);
} catch (Exception e) {
e.printStackTrace();
}

md.reset();
md.update(plainText);
byte[] encodedPassword = md.digest();

                /*************需要讲解*********************/
StringBuilder sb = new StringBuilder();
for (int i = 0; i < encodedPassword.length; i++) {
if ((encodedPassword[i] & 0xff) < 0x10) {
sb.append("0");
}

sb.append(Long.toString(encodedPassword[i] & 0xff, 16));
}
                /*****************************************/                 System.out.println("Plain    : " + password);
System.out.println("Encrypted: " + sb.toString());
}
}
 小弟没分了,恳请高人详细讲解一下中间的位运算是怎么回事

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【pandajj】截止到2008-07-15 14:24:07的历史汇总数据(不包括此帖):
    发帖的总数量:20                       发帖的总分数:340                      每贴平均分数:17                       
    回帖的总数量:4                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:20                       未结的总分数:340                      
    结贴的百分比:0.00  %               结分的百分比:0.00  %                  
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    encodedPassword[i] & 0xff 的作用是讲有符号的byte类型变成无符号类型,通过这个运算那么数组里的所以值都变成0-255的正数了。如果转行后的数小于16,则在转换成字符串的时候补一个0在前面。这样保证每个数都占两个字符。
    由于java不提供无符号数,因此这样的转换经常使用。