android&php 加密解密
from://http://blog.iyunv.com/hecker385/article/details/6717647android&php 加密解密
分类: Php Android2011-08-25 11:15 556人阅读 评论(2) 收藏 举报
android加密phplayoutexceptionstring
MyCryptActivity.java
view plaincopyprint?
[*]package com.test.crypt;
[*]
[*]import android.app.Activity;
[*]import android.os.Bundle;
[*]import android.view.View;
[*]import android.view.View.OnClickListener;
[*]import android.widget.Button;
[*]import android.widget.EditText;
[*]
[*]public class MyCryptActivity extends Activity {
[*] /** Called when the activity is first created. */
[*] private EditText plainTextbefore, plaintextafter, ciphertext;
[*] private Button button01;
[*] private MCrypt mcrypt;
[*] @Override
[*] public void onCreate(Bundle savedInstanceState) {
[*] super.onCreate(savedInstanceState);
[*] setContentView(R.layout.main);
[*]
[*] plainTextbefore = (EditText)findViewById(R.id.EditText01);
[*] ciphertext = (EditText)findViewById(R.id.EditText02);
[*] plaintextafter = (EditText)findViewById(R.id.EditText03);
[*] button01=(Button)findViewById(R.id.Button01);
[*] plainTextbefore.setHint("请输入要加密的字符串");
[*] button01.setOnClickListener(new OnClickListener() {
[*] @Override
[*] public void onClick(View v) {
[*] // TODO Auto-generated method stub
[*] String plainText = plainTextbefore.getText().toString();
[*] mcrypt = new MCrypt();
[*] try {
[*] String encrypted = MCrypt.bytesToHex( mcrypt.encrypt(plainText));
[*] String decrypted = new String( mcrypt.decrypt( encrypted ) );
[*] ciphertext.setText(encrypted);
[*] plaintextafter.setText(decrypted);
[*] } catch (Exception e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] }
[*] }
[*] });
[*] }
[*]}
MCrypt.java
view plaincopyprint?
[*]package com.test.crypt;
[*]
[*]import java.security.NoSuchAlgorithmException;
[*]
[*]import javax.crypto.Cipher;
[*]import javax.crypto.NoSuchPaddingException;
[*]import javax.crypto.spec.IvParameterSpec;
[*]import javax.crypto.spec.SecretKeySpec;
[*]
[*]public class MCrypt {
[*]
[*] private String iv = "0123456789123456";//
[*] private IvParameterSpec ivspec;
[*] private SecretKeySpec keyspec;
[*] private Cipher cipher;
[*]
[*] private String SecretKey = "0123456789abcdef";//secretKey
[*]
[*] public MCrypt()
[*] {
[*] ivspec = new IvParameterSpec(iv.getBytes());//偏移量
[*]
[*] keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");//生成密钥
[*]
[*] try {
[*] cipher = Cipher.getInstance("AES/CBC/NoPadding");
[*] } catch (NoSuchAlgorithmException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] } catch (NoSuchPaddingException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] }
[*] }
[*]
[*] public byte[] encrypt(String text) throws Exception
[*] {
[*] if(text == null || text.length() == 0)
[*] throw new Exception("Empty string");
[*]
[*] byte[] encrypted = null;
[*]
[*] try {
[*] cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
[*]
[*] encrypted = cipher.doFinal(padString(text).getBytes());
[*] } catch (Exception e)
[*] {
[*] throw new Exception(" " + e.getMessage());
[*] }
[*]
[*] return encrypted;
[*] }
[*]
[*] public byte[] decrypt(String code) throws Exception
[*] {
[*] if(code == null || code.length() == 0)
[*] throw new Exception("Empty string");
[*]
[*] byte[] decrypted = null;
[*]
[*] try {
[*] cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);//<span style="font-family: Simsun;font-size:16px; ">用密钥和一组算法参数初始化此 Cipher。</span>
[*]
[*] decrypted = cipher.doFinal(hexToBytes(code));
[*] } catch (Exception e)
[*] {
[*] throw new Exception(" " + e.getMessage());
[*] }
[*] return decrypted;
[*] }
[*]
[*]
[*]
[*] public static String bytesToHex(byte[] data)
[*] {
[*] if (data==null)
[*] {
[*] return null;
[*] }
[*]
[*] int len = data.length;
[*] String str = "";
[*] for (int i=0; i<len; i++) {
[*] if ((data&0xFF)<16)
[*] str = str + "0" + java.lang.Integer.toHexString(data&0xFF);
[*] else
[*] str = str + java.lang.Integer.toHexString(data&0xFF);
[*] }
[*] return str;
[*] }
[*]
[*]
[*] public static byte[] hexToBytes(String str) {
[*] if (str==null) {
[*] return null;
[*] } else if (str.length() < 2) {
[*] return null;
[*] } else {
[*] int len = str.length() / 2;
[*] byte[] buffer = new byte;
[*] for (int i=0; i<len; i++) {
[*] buffer = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16);
[*] }
[*] return buffer;
[*] }
[*] }
[*]
[*]
[*]
[*] private static String padString(String source)
[*] {
[*] char paddingChar = ' ';
[*] int size = 16;
[*] int x = source.length() % size;
[*] int padLength = size - x;
[*]
[*] for (int i = 0; i < padLength; i++)
[*] {
[*] source += paddingChar;
[*] }
[*]
[*] return source;
[*] }
[*]}
main.xml
view plaincopyprint?
[*]<?xml version="1.0" encoding="utf-8"?>
[*]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
[*] android:orientation="vertical"
[*] android:layout_width="fill_parent"
[*] android:layout_height="fill_parent">
[*]
[*]<TableLayout
[*]android:id="@+id/TableLayout01"
[*]android:layout_width="fill_parent"
[*]android:layout_height="wrap_content"
[*]android:collapseColumns="2"
[*]android:stretchColumns="1">
[*] <TableRow
[*] android:id="@+id/TableRow01"
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content">
[*] <TextView
[*] android:layout_width="fill_parent"
[*] android:layout_height="wrap_content"
[*] android:text="明文:"></TextView>
[*] <EditText
[*] android:id="@+id/EditText01"
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content"></EditText>
[*] </TableRow>
[*]
[*] <TableRow
[*] android:id="@+id/TableRow02"
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content">
[*] <TextView
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content"
[*] android:text="密文:"></TextView>
[*] <EditText
[*] android:id="@+id/EditText02"
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content"></EditText>
[*] </TableRow>
[*] <TableRow
[*] android:id="@+id/TableRow03"
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content">
[*] <TextView
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content"
[*] android:text="明文:"></TextView>
[*] <EditText
[*] android:id="@+id/EditText03"
[*] android:layout_width="wrap_content"
[*] android:layout_height="wrap_content"></EditText>
[*] </TableRow>
[*]</TableLayout>
[*]
[*] <Button
[*] android:layout_width="fill_parent"
[*] android:layout_height="wrap_content"
[*] android:id="@+id/Button01"
[*] android:text="显示密文,并解密"></Button>
[*]</LinearLayout>
php:
view plaincopyprint?
[*]<?php
[*]
[*]class MCrypt
[*]{
[*] private $iv = 'fedcba9876543210'; #Same as in JAVA
[*] private $key = '0123456789abcdef'; #Same as in JAVA
[*]
[*]
[*] function __construct()
[*] {
[*] }
[*]
[*] function encrypt($str) {
[*]
[*] //$key = $this->hex2bin($key);
[*] $iv = $this->iv;
[*]
[*] $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
[*]
[*] mcrypt_generic_init($td, $this->key, $iv);
[*] $encrypted = mcrypt_generic($td, $str);
[*]
[*] mcrypt_generic_deinit($td);
[*] mcrypt_module_close($td);
[*]
[*] return bin2hex($encrypted);
[*] }
[*]
[*] function decrypt($code) {
[*] //$key = $this->hex2bin($key);
[*] $code = $this->hex2bin($code);
[*] $iv = $this->iv;
[*]
[*] $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
[*]
[*] mcrypt_generic_init($td, $this->key, $iv);
[*] $decrypted = mdecrypt_generic($td, $code);
[*]
[*] mcrypt_generic_deinit($td);
[*] mcrypt_module_close($td);
[*]
[*] return utf8_encode(trim($decrypted));
[*] }
[*]
[*] protected function hex2bin($hexdata) {
[*] $bindata = '';
[*]
[*] for ($i = 0; $i < strlen($hexdata); $i += 2) {
[*] $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
[*] }
[*]
[*] return $bindata;
[*] }
[*]
[*]}
页:
[1]