sha1加密java
publicclassSha1{
/**
*SHA1安全加密演算法
*@parammaps參數key-valuemap集合
*@return
*@throwsDigestException
*/
publicstaticStringSHA1(Map<String,Object>maps)throwsDigestException{
//獲取信息摘要-參數字典排序後字元串
Stringdecrypt=getOrderByLexicographic(maps);
try{
//指定sha1演算法
MessageDigestdigest=MessageDigest.getInstance("SHA-1");
digest.update(decrypt.getBytes());
//獲取位元組數組
bytemessageDigest[]=digest.digest();
//CreateHexString
StringBufferhexString=newStringBuffer();
//位元組數組轉換為十六進制數
for(inti=0;i<messageDigest.length;i++){
StringshaHex=Integer.toHexString(messageDigest[i]&0xFF);
if(shaHex.length()<2){
hexString.append(0);
}
hexString.append(shaHex);
}
returnhexString.toString().toUpperCase();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
thrownewDigestException("簽名錯誤!");
}
}
/**
*獲取參數的字典排序
*@parammaps參數key-valuemap集合
*@returnString排序後的字元串
*/
(Map<String,Object>maps){
returnsplitParams(lexicographicOrder(getParamsName(maps)),maps);
}
/**
*獲取參數名稱key
*@parammaps參數key-valuemap集合
*@return
*/
privatestaticList<String>getParamsName(Map<String,Object>maps){
List<String>paramNames=newArrayList<String>();
for(Map.Entry<String,Object>entry:maps.entrySet()){
paramNames.add(entry.getKey());
}
returnparamNames;
}
/**
*參數名稱按字典排序
*@paramparamNames參數名稱List集合
*@return排序後的參數名稱List集合
*/
privatestaticList<String>lexicographicOrder(List<String>paramNames){
Collections.sort(paramNames);
returnparamNames;
}
/**
*拼接排序好的參數名稱和參數值
*@paramparamNames排序後的參數名稱集合
*@parammaps參數key-valuemap集合
*@returnString拼接後的字元串
*/
(List<String>paramNames,Map<String,Object>maps){
StringBuilderparamStr=newStringBuilder();
for(StringparamName:paramNames){
paramStr.append(paramName);
for(Map.Entry<String,Object>entry:maps.entrySet()){
if(paramName.equals(entry.getKey())){
paramStr.append(String.valueOf(entry.getValue()));
}
}
}
returnparamStr.toString();
}
B. 如何使用java進行sha1加密
使用下面的語句即可:
digestutils.shahex(要加密的字元);加密參數最好用位元組數組,畢竟sha1演算法是使用位元組為單位進行運算的,字元串轉位元組還與字元編碼有關。
C. 如何使用java進行sha1加密
簡單的做法是
1、使用apache的codec jar包對string進行加密,先下載並引入jar包:http://commons.apache.org/proper/commons-codec/
2、生成:
String sign = DigestUtils.shaHex(str);
3.也可以使用工具在線進行sha加密,參考 hash值(md5, sha1, sha256, sha512,crc32) 在線計算,http://www.it399.com/m/FileHash。望採納,謝謝。
D. php 如何實現 java的sha1加密
function
encryptTokey($data){
$apikey
=
'testapikey111';
$ps1
=
sha1($apikey
.
strtolower($data));
$ps1
=
strtoupper($ps1);
$s1
=
implode(str_split($ps1,
2),
'-');
$ps2
=
md5($s1
.
$apikey);
$ps2
=
strtoupper($ps2);
$token
=
implode(str_split($ps2,
2),
'-');
return
$token;
}
echo
encryptTokey('testdata');
運行結果:
68-10-98-74-4C-82-74-4B-CC-49-31-98-46-02-EE-8E
詳細你可以去後盾人看看,這些都是後盾人裡面的,哪裡有詳細的視頻教學都是高質量,我自己就是在裡面學的。
E. java的sha1加密和object-c的sha1加密後的值不一樣,誰能幫我解決一下。多謝了
結果是一樣的, 但是你多搞了一點: java你是用Base64編碼成字元串, 而ObjC你是直接用16進制輸出的, 你java上不Base64編碼, 也輸出成16進制, 就一樣了;
F. java KeyGenerator.getInstance("AES"); SecureRandom.getInstance("SHA1PRNG"); 生成的秘鑰 php怎樣解
sha1 md5這種加密是不可逆的啊,准確的說,解不了,如果簡單的話,可以去網站的海量資料庫試試
G. 求教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