java - 求帮忙把这个DES加密代码转换成PHP的.. 这是DES算法么 ..
迷茫
迷茫 2017-04-11 09:44:52
0
3
628
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.io.IOException; import java.security.SecureRandom; public class PHPDESEncrypt { String key; public PHPDESEncrypt() { } public PHPDESEncrypt(String key) { this.key = key; } public byte[] desEncrypt(byte[] plainText) throws Exception { SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key, sr); byte data[] = plainText; byte encryptedData[] = cipher.doFinal(data); return encryptedData; } public byte[] desDecrypt(byte[] encryptText) throws Exception { SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key, sr); byte encryptedData[] = encryptText; byte decryptedData[] = cipher.doFinal(encryptedData); return decryptedData; } public String encrypt(String input) throws Exception { return base64Encode(desEncrypt(input.getBytes())).replaceAll("\\s*", ""); } public String decrypt(String input) throws Exception { byte[] result = base64Decode(input); return new String(desDecrypt(result)); } public String base64Encode(byte[] s) { if (s == null) return null; BASE64Encoder b = new sun.misc.BASE64Encoder(); return b.encode(s); } public byte[] base64Decode(String s) throws IOException { if (s == null) { return null; } BASE64Decoder decoder = new BASE64Decoder(); byte[] b = decoder.decodeBuffer(s); return b; } public static void main(String[] args) { try { PHPDESEncrypt d = new PHPDESEncrypt("12345678"); String p = d.encrypt("love"); System.out.println("密文:" + p); } catch (Exception e) { e.printStackTrace(); } } public String getKey() { return key; } public void setKey(String key) { this.key = key; } }
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信 (3)
左手右手慢动作

des加密有好几种。。不知道你这种是哪个。。。这里有两种,你可以对照一下php Des加密

いいねを押す+0
    洪涛

    这个……看你贴的代码是java吧!你要用phpDES解密需要至少得需要知道加密key和对应的加密模式例如是CBC,CFB,ECB等!确认好之后,用楼上的给你的dome应该没问题的

    いいねを押す+0
      左手右手慢动作
      class DES { static public function encrypt($str, $key) { $block = mcrypt_get_block_size('des', 'ecb'); $pad = $block - (strlen($str) % $block); $str .= str_repeat(chr($pad), $pad); $data = mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB); return base64_encode($data); } static public function decrypt($str, $key) { $str = base64_decode($str); $str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB); $pad = ord($str[($len = strlen($str)) - 1]); return substr($str, 0, strlen($str) - $pad); } }
      いいねを押す+0
        最新のダウンロード
        詳細>
        ウェブエフェクト
        公式サイト
        サイト素材
        フロントエンドテンプレート
        私たちについて 免責事項 Sitemap
        PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!