當前位置:首頁 » 編程語言 » base64phpjava

base64phpjava

發布時間: 2024-04-03 16:58:25

1. php base64 加密javascript base64 不一樣

你在線加密用的是GB2312
而你PHP採用的是UTF-8
這兩種編碼編出來的位元組是不一樣
因此BASE64通過位元組編碼的
導致你看到的結果不一樣。
如果你想PHP加出來和在線加密一樣,你可以把編碼轉一致就可以了。
<?php echo base64_encode(iconv('utf-8','gbk',"胡蘿卜")); ?>

這樣子就能和在線加密是一樣的了。

2. php的base64加密,怎麼調整才能和java的base64的加密結果一致呢

phpbase64以後每76個字元加一個換行,
function javaBase64Encode($str)
{
$str = base64_encode($str);
$strLength = strlen($str);
$n = intval($strLength / 76);
if ($n <= 0) {
return $str;
}
for ($i = 1; $i <= $n; $i++) {
$position = 76 * $i + ($i - 1);
$str = substr_replace($str, PHP_EOL, $position, 0);
}
return $str;

}

function javaBase64Decode($str)
{
$strLength = strlen($str);
$n = intval($strLength / 76);
if ($n <= 0) {
return $str;
}
for ($i = $n; $i >= 1; $i--) {
$position = 76 * $i + ($i - 1);
$str = substr_replace($str, "", $position, 1);
}
return base64_decode($str);
}
或者使用chunk_split 函數也可以,默認就是76,而且不是所有的java代碼都需要這樣轉,要看java調用的是什麼類庫,有一些是不用的

3. java base64

java base64是什麼,讓我們一起了解一下?

Base64是一種編碼方法,要求把每三個8Bit的位元組轉換為四個6Bit的位元組,轉換之後的這四個位元組中每6個晌慧穗有效bit為有效數據,空餘的那兩個bit用0補上成為一個位元組。

為什麼要使用Base64?

Base 64主要用途不是加密,而是把一些二進制數轉成普通字元,方便在網路上傳輸。 由於一些二進制字元在傳輸協議中屬於控制字元,不能直接傳送,所以需要轉換一下才可以。由於某些系統中只能使用ASCII字元,Base64就是用來將非ASCII字元的數據轉換成ASCII字元的一種方法,Base64特別適合在http,mime協議下快速傳輸數據。

比如網路中圖片的傳輸Base64,並非安全領域下的加密解密演算法。雖然經常遇到所謂的base64的加密解密。但base64隻能算是一個編碼演算法,對數據內容進行編碼來適合傳輸。雖然base64編碼過後原文也變成不能看到的字元格式,但是方式初級又簡單。

那在Java中想要實現Base64的加解密,有哪些方式?

主要有以下四種(推薦度由低到高):

1、JDK中的宴卜sun.misc套碧桐件。

2、第三方擴展包 bouncy castle。

3、第三方擴展包 commons codec。

4、JDK8及更高版本中的 java.util.Base64。

實戰操作,JDK實現代碼如下: import sun.misc.BASE64Decoder;   import sun.misc.BASE64Encoder;   /** * BASE64加密解密 */   public class BASE64 {       /** * BASE64解密 * @param key * @return * @throws Exception */       public static byte[] decryptBASE64(String key) throws Exception {           return (new BASE64Decoder()).decodeBuffer(key);       }       /** * BASE64加密 * @param key * @return * @throws Exception */       public static String encryptBASE64(byte[] key) throws Exception {           return (new BASE64Encoder()).encodeBuffer(key);       }       public static void main(String[] args) throws Exception {           String data = BASE64.encryptBASE64("http://aub.iteye.com/".getBytes());           System.out.println("加密前:" + data);           byte[] byteArray = BASE64.decryptBASE64(data);           System.out.println("解密後:" + new String(byteArray));       }   }

4. 求教PHP和JAVA大神 base64_encode(hash_hmac('sha1',$public_key,$private_key,TRUE)); 轉 java

如果你的API服務安全認證協議中要求使用hmac_sha1方法對信息進行編碼,

而你的服務是由PHP實現的,客戶端是由JAVA實現的,那麼為了對簽名正確比對,就需要在兩者之間建立能匹配的編碼方式.
efine('ID','123456');
define('KEY','k123456');

$strToSign = "test_string";

$utf8Str = mb_convert_encoding($strToSign, "UTF-8");
$hmac_sha1_str = base64_encode(hash_hmac("sha1", $utf8Str, KEY));
$signature = urlencode($hmac_sha1_str);
print_r($signature);

JAVA側需要注意如下幾點:
1. hmac_sha1編碼結果需要轉換成hex格式

2. java中base64的實現和php不一致,其中java並不會在字元串末尾填補=號以把位元組數補充為8的整數
3. hmac_sha1並非sha1, hmac_sha1是需要共享密鑰的

參考實現如下:
[java] view plain
import java.io.UnsupportedEncodingException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.wicket.util.crypt.Base64UrlSafe;

public class test {
public static void main(String[] args) {
String key = "";
String toHash = "GET"+"\n"+"Thu, 09 Aug 2012 13:33:46 +0000"+"\n"+"/ApiChannel/Report.m";
//String toHashUtf8 = URLEncoder.encode(toHash, "UTF-8");
String res = hmac_sha1(toHash, key);
//System.out.print(res+"\n");

String signature;
try {
signature = new String(Base64UrlSafe.encodeBase64(res.getBytes()),"UTF-8");
signature = appendEqualSign(signature);
System.out.print(signature);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}

public static String hmac_sha1(String value, String key) {
try {
// Get an hmac_sha1 key from the raw key bytes
byte[] keyBytes = key.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");

// Get an hmac_sha1 Mac instance and initialize with the signing key
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);

// Compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal(value.getBytes());

// Convert raw bytes to Hex
String hexBytes = byte2hex(rawHmac);
return hexBytes;
} catch (Exception e) {
throw new RuntimeException(e);
}
}

private static String byte2hex(final byte[] b){
String hs="";
String stmp="";
for (int n=0; n<b.length; n++){
stmp=(java.lang.Integer.toHexString(b[n] & 0xFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
}
return hs;
}

private static String appendEqualSign(String s){
int len = s.length();
int appendNum = 8 - (int)(len/8);
for (int n=0; n<appendNum; n++){
s += "%3D";
}
return s;
}
}

參考:http://www.iteye.com/topic/1002652

5. java base64解碼 怎麼是亂碼呢

會亂碼的原因是你的編碼不一致導致的
php中的urlencode的編碼是和系統編碼一致的(比如windows默認gb2312,ubuntu默認utf-8)
所以首先需要確定你的系統編碼,之後根據得到的系統編碼在調用java的decode方法的時候,將這個編碼傳入(考慮到你的例子中有繁體字,所以,建議你使用utf-8編碼),以下是我使用utf-8編碼的例子(php環境是ubuntun下)

熱點內容
零起點學通c語言視頻 發布:2024-11-28 14:29:42 瀏覽:290
python獲取串口數據 發布:2024-11-28 14:22:39 瀏覽:666
台灣ip代理伺服器雲主機 發布:2024-11-28 14:18:24 瀏覽:465
php寫後端 發布:2024-11-28 14:09:36 瀏覽:234
拍環衛工人的腳本 發布:2024-11-28 14:03:35 瀏覽:990
java課程實戰培訓 發布:2024-11-28 13:57:11 瀏覽:303
linux硬碟空間 發布:2024-11-28 13:55:55 瀏覽:531
寫簡單編譯器 發布:2024-11-28 13:55:42 瀏覽:512
編譯net時 發布:2024-11-28 13:52:38 瀏覽:405
sqlserver2008分區表 發布:2024-11-28 13:41:58 瀏覽:481