Java MD5加密,Java 计算文件MD5值

[本类为java MD5工具类]

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigInteger;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;

/**
 * MD5加密运算类
 * 
 * @author LXQ
 * @version 1.0 2014-4-14
 */
public class SECURITY_MD5 {
        /**
         * 加密一个输入字符串
         * 
         * @param visibleString
         *            输入一个可见的明码<br>
         *            类型:java.lang.String
         * @return 一个加密后的MD5值<br>
         *         通常用于密码加密
         */
        public static String getEnMD5String(String visibleString) {
                MessageDigest md5;
                try {
                        // 生成一个MD5加密计算摘要
                        md5 = MessageDigest.getInstance("MD5");
                        // 计算md5函数
                        md5.update(visibleString.getBytes());
                        // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
                        // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的 值
                        String pwd = new BigInteger(1, md5.digest()).toString(16);
                        return pwd;
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return visibleString;
        }

        /**
         * 计算文件MD5值
         * 
         * @param file
         *            输入一个文件参数<br>
         *            类型:java.io.File
         * @return 该文件的MD5值<br>
         *         类型:java.lang.String
         */
        public static String getMd5ForFile(File file) {
                String value = null;
                FileInputStream in = null;
                try {
                        in = new FileInputStream(file);
                        MappedByteBuffer byteBuffer = in.getChannel().map(
                                        FileChannel.MapMode.READ_ONLY, 0, file.length());
                        MessageDigest md5 = MessageDigest.getInstance("MD5");
                        md5.update(byteBuffer);
                        BigInteger bi = new BigInteger(1, md5.digest());
                        value = bi.toString(16);
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        if (null != in) {
                                try {
                                        in.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
                return value;
        }
}

 

 

欢迎分享本文,转载请注明出处,本文出处:竹林教程 点击复制

戮克 發表在 痞客邦 留言(0) 人氣()

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。


在串行传送(磁盘、通讯)中,广泛采用循环冗余校验码(CRC)。CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。

CRC的理论很复杂,一般书上只介绍已有生成多项式后计算校验码的方法。检错能力与生成多项式有关,只能根据书上的结论死记。

戮克 發表在 痞客邦 留言(0) 人氣()

import java.security.MessageDigest;

public class Md5 {


public final static String md5(String plainText) {

// 返回字符串
String md5Str = null;
try {
// 操作字符串
StringBuffer buf = new StringBuffer();


戮克 發表在 痞客邦 留言(0) 人氣()

轉載自:Java中常用的加密方法(JDK) - Java - language - ITeye论坛

加密,是以某種特殊的演算法改變原有的信息數據,使得未授權的用戶即使獲得了已加密的信息,但因不知解密的方法,仍然無法了解信息的內容。大體上分為雙向加密和單向加密,而雙向加密又分為對稱加密和非對稱加密(有些資料將加密直接分為對稱加密和非對稱加密)。

雙向加密大體意思就是明文加密後形成密文,可以通過演算法還原成明文。而單向加密只是對信息進行了摘要計算,不能通過演算法生成明文,單向加密從嚴格意思上說不能算是加密的一種,應該算是摘要演算法吧。具體區分可以參考:
(本人解釋不清呢 …… )
http://security.group.iteye.com/group/wiki/1710-one-way-encryption-algorithm


一、雙向加密

 

(一)、對稱加密


采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
需要對加密和解密使用相同密鑰的加密演算法。由於其速度,對稱性加密通常在消息發送方需要加密大量數據時使用。對稱性加密也稱為密鑰加密。
所謂對稱,就是采用這種加密方法的雙方使用方式用同樣的密鑰進行加密和解密。密鑰是控制加密及解密過程的指令。

演算法是一組規則,規定如何進行加密和解密。因此對稱式加密本身不是安全的。   
常用的對稱加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES 演算法等

對稱加密一般 Java 類中中定義成員

 
  1. // KeyGenerator 提供對稱密鑰生成器的功能,支持各種演算法  
  2. private KeyGenerator keygen;  
  3. // SecretKey 負責保存對稱密鑰  
  4. private SecretKey deskey;  
  5. // Cipher負責完成加密或解密工作  
  6. private Cipher c;  
  7. // 該字節數組負責保存加密的結果  
  8. private byte[] cipherByte;  



在構造函數中初始化

 
  1. Security.addProvider(new com.sun.crypto.provider.SunJCE());  
  2. // 實例化支持 DES 演算法的密鑰生成器(演算法名稱命名需按規定,否則拋出異常)  
  3. keygen = KeyGenerator.getInstance("DES");//  
  4. // 生成密鑰  
  5. deskey = keygen.generateKey();  
  6. // 生成 Cipher 物件,指定其支持的 DES 演算法  
  7. c = Cipher.getInstance("DES");  



1. DES
演算法為密碼體制中的對稱密碼體制,又被成為美國數據加密標准,是 1972 年美國 IBM 公司研制的對稱密碼體制加密演算法。 明文按 64 位進行分組, 密鑰長 64 位,密鑰事實上是 56 位參與 DES 運算(第 8、16、24、32、40、48、56、64 位是校驗位, 使得每個密鑰都有奇數個 1)分組後的明文組和 56 位的密鑰按位替代或交換的方法形成密文組的加密方法。

戮克 發表在 痞客邦 留言(0) 人氣()

org.apache.commons.codec.digest 
Class DigestUtils

java.lang.Object
  

extended by

org.apache.commons.codec.digest.DigestUtils

static String md5Hex(String data) 
          Calculates the MD5 digest and returns the value as a 32 character hex string.

apache commons codec下载:http://commons.apache.org/proper/commons-codec/download_codec.cgi

实现方法:

  1. import org.apache.commons.codec.digest.*; 
  2.  
  3. public class md5another { 
  4.     public void md5create(String input) { 
  5.         System.out.print("32bit result:" + DigestUtils.md5Hex(input) + "\n"); 
  6.         System.out.print("16bit result:" 
  7.                 + DigestUtils.md5Hex(input).substring(824) + "\n"); 
  8.     } 
  9.  
  10.     public static void main(String[] args) { 
  11.  
  12.         md5another a = new md5another(); 
  13.         a.md5create("nenew"); 
  14.     } 

 


本文链接地址: Java调用Apache commons codec实现md5加密

原创文章,转载请注明: 转载自奶牛博客

 


戮克 發表在 痞客邦 留言(0) 人氣()

如果你需要修改模型材质的颜色,或者是修改材质Shader的一些属性, 通常情况是用获取模型的Renderer组件,然后获取它的material属性。

举个简单的例子,修改颜色或者直接更换shader

material.color = Color.red;
material.shader = Resources.Load(“Shader/Alpha-Diffuse”, typeof(Shader)) as Shader;

Render可以使用material或者是sharedMaterial两个属性。

Renderer render;

render.material;

render.sharedMaterial;

         这两个属性用法是一样的,但是从效率上来说最好用sharedMaterial,它是共享材质,无论如何操作材质的属性(如更换颜色或者更换shader),内存中只会占用一份。但是如果要是用material的话,每次更换属性的时候Unity就会自动new一份新的material作用于它。它直到Application.LoadLevel() 或者Resources.UnloadUnusedAssets();的时候才会施放内存。所以material就有可能会造成内存泄漏,那么我们干脆就不要使用它。

          但是在代码中如果直接用render.sharedMaterial的话,你会发现在编辑器开发模式下,运行一会儿游戏本地的.material文件凡是修改了的都变化了,如果这些文件都在svn管理中,那么他们都会变成红叹号,表示文件已经被修改。这样太危险了,一不小心上传了怎么办。 为了解决这个问题,可以用一个简单的方法,每次获取material的时候根据平台而定。

 

戮克 發表在 痞客邦 留言(0) 人氣()