异或加密算法原理
异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能。
异或加密使用场景
1.两变量互换值,不引进第三个变量。
2.简单的数据加密算法。
使用 看代码:
public class XOPActivity extends Activity { private EditText editText; private String encodedString ; private Button butde , buten ; private byte[] data ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base64); editText = (EditText) findViewById(R.id.tv); butde = (Button) findViewById( R.id.debut); buten = (Button) findViewById( R.id.enbut); //加密 butde.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //data = encrypt(editText.getText().toString().getBytes()); data = encryptkey(editText.getText().toString().getBytes()); } }); //解密 buten.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //editText.setText(encrypt(data).toString()); editText.setText(decrypt(data).toString()); } }); } /** * 异或加密解密 (使用不定的 key ) 加密解密同一个方法 * @param bytes * @return */ public byte[] encrypt(byte[] bytes) { if (bytes == null) { return null; } int len = bytes.length; int key = 0x12; for (int i = 0; i < len; i++) { bytes[i] ^= key; } return bytes; } //==========使用不规定的 key ============//* /** *使用不规定key加密 * @param bytes * @return */ public byte[] encryptkey(byte[] bytes) { if (bytes == null) { return null; } int len = bytes.length; int key = 0x12; for (int i = 0 ; i < len ; i++) { bytes[i] = (byte) (bytes[i] ^ key); key = bytes[i]; //key在变化 } return bytes; } /** * 使用不固定key解密 * @param bytes * @return */ public byte[] decrypt(byte[] bytes) { if (bytes == null) { return null; } int len = bytes.length; int key = 0x12; for (int i = len - 1 ; i > 0 ; i--) { bytes[i] = (byte) (bytes[i] ^ bytes[i - 1]); } bytes[0] = (byte) (bytes[0] ^ key); return bytes; } }
xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/activity_base64" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="46dp" android:text="Hello World!"/> <Button android:id="@+id/debut" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="baseEncode" android:text="base64编码"/> <Button android:id="@+id/enbut" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="baseDecode" android:text="base64解码"/> </LinearLayout>
比较简单