2016-11-22 67 views
0

我已經制作了這個PHP加密腳本。現在我想知道如何在Java中完成這項工作。我正在考慮放棄它,並用Javascript編碼,以便它可以在兩種語言中使用。很不幸,這不是我想要的。我如何在Java中這樣做?使用與Java中相同的PHP加密方法

<?php 
    $encrypted = encrypt("Hello goodbye", "Pizza"); 
    $decrypted = decrypt($encrypted, "Pizza"); 

    echo $encrypted; 
    echo "<br/>"; 
    echo $decrypted; 

    function encrypt($string, $key) { 
    $result = ''; 
    for($i=0; $i<strlen($string); $i++) { 
     $char = substr($string, $i, 1); 
     $keychar = substr($key, ($i % strlen($key))-1, 1); 
     $char = chr(ord($char)+ord($keychar)); 
     $result.=$char; 
    } 

    return base64_encode($result); 
    } 

    function decrypt($string, $key) { 
    $result = ''; 
    $string = base64_decode($string); 

    for($i=0; $i<strlen($string); $i++) { 
     $char = substr($string, $i, 1); 
     $keychar = substr($key, ($i % strlen($key))-1, 1); 
     $char = chr(ord($char)-ord($keychar)); 
     $result.=$char; 
    } 

    return $result; 
    } 
?> 

我不要求寫一些代碼對我來說(但將是巨大的),但我想得到幫助或在正確的方向

編輯獲得一推: 我不想發佈和通過Java

+1

你可以看看這個,如果有幫助:https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html – grsdev7

+0

這甚至不是加密,只是在Java中實施一些加密。由於這不是代碼服務,請發佈Java代碼。 –

+0

@MargaretBloom我甚至沒有Java代碼,因爲我不知道如何去做。 – Jason

回答

1
import java.security.Key; 

import javax.crypto.Cipher; 
import javax.crypto.spec.SecretKeySpec; 

import sun.misc.BASE64Decoder; 
import sun.misc.BASE64Encoder; 

public class AdvanceEncryptionSecurity { 

    private static final String ALGORITHM = "AES"; 
    private static final int ITERATIONS = 2; 
    private static final byte[] keyValue = new byte[] { 'P', 'R', 'S', 'a', 'n', 'd', 'A', 'P', 'F', 'A', 'A', 'l', 'l', 'i', 'e', 'd' }; 
    private static String salt = "prs and pfa"; 

    public static String encrypt(String value) throws Exception { 
     Key key = generateKey(); 
     Cipher c = Cipher.getInstance(ALGORITHM); 
     c.init(Cipher.ENCRYPT_MODE, key); 

     String valueToEnc = null; 
     String eValue = value; 
     for (int i = 0; i < ITERATIONS; i++) { 
      valueToEnc = salt + eValue; 
      byte[] encValue = c.doFinal(valueToEnc.getBytes()); 
      eValue = new BASE64Encoder().encode(encValue); 
     } 
     return eValue; 
    } 

    public static String decrypt(String value) throws Exception { 
     Key key = generateKey(); 
     Cipher c = Cipher.getInstance(ALGORITHM); 
     c.init(Cipher.DECRYPT_MODE, key); 

     String dValue = null; 
     String valueToDecrypt = value; 
     for (int i = 0; i < ITERATIONS; i++) { 
      byte[] decordedValue = new BASE64Decoder().decodeBuffer(valueToDecrypt); 
      byte[] decValue = c.doFinal(decordedValue); 
      dValue = new String(decValue).substring(salt.length()); 
      valueToDecrypt = dValue; 
     } 
     return dValue; 
    } 

    private static Key generateKey() throws Exception { 
     Key key = new SecretKeySpec(keyValue, ALGORITHM); 
     return key; 
    } 
} 

試試這個代碼到PHP文件。它可以是encryptdecrypt。我假設你知道如何在java中編碼。

+0

我在android java上使用它,所以它不能導入sun.misc.BASE64Decoder和編碼器 – Jason

+0

我解決了導入錯誤。我怎樣才能提供一個密鑰我自己或類似的東西?因爲我沒有收到與用PHP加密它相同的加密短語 – Jason

+0

我們有不同的算法,這就是爲什麼我們沒有相同的加密短語。 – msagala25

相關問題