XOR

1264 ワード

public class XORUtil {
	
	private static XORUtil _instance;
	
	private XORUtil(){
		
	}
	
	public static XORUtil getInstance(){
		if(null == _instance)
			_instance = new XORUtil();
		return _instance;
	}
	
	/**
	 * XOR Operation Process
	 * @param _str
	 * @return
	 */
	private byte XoRProcess (String _str) {
		byte _resultByte = 0;
		int j = 0;
		byte [] _strByte = _str.getBytes();
		for (int i = 0; i < _strByte.length;  i++) {
			j = i + 1;
			if(j == _str.length())
				break;
			if(i == 0){
				_resultByte =  (byte)(_strByte[i] ^ _strByte[j]);
			}else{
				_resultByte = (byte)(_resultByte ^ _str.charAt(j));
			}
		}
		return _resultByte;
	}
	
	/**
	 * Byte 2 Binary 
	 * @param _sourceStr
	 * @return
	 */
	public String encryptXOR(String _sourceStr){
		_sourceStr = Integer.toBinaryString(XoRProcess(_sourceStr));
		if(_sourceStr.length() < 8){
			while(_sourceStr.length() < 8){
				_sourceStr = "0"+_sourceStr;
			}
		}
		return _sourceStr;
	}
}