回答
這裏有2種方法,同時尋找一個SHA1算法實現我發現:
private static String convertToHex(byte[] data) {
StringBuffer buf = new StringBuffer();
int length = data.length;
for(int i = 0; i < length; ++i) {
int halfbyte = (data[i] >>> 4) & 0x0F;
int two_halfs = 0;
do {
if((0 <= halfbyte) && (halfbyte <= 9))
buf.append((char) ('0' + halfbyte));
else
buf.append((char) ('a' + (halfbyte - 10)));
halfbyte = data[i] & 0x0F;
}
while(++two_halfs < 1);
}
return buf.toString();
}
public static String SHA1(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] sha1hash = new byte[40];
md.update(text.getBytes("iso-8859-1"), 0, text.length());
sha1hash = md.digest();
return convertToHex(sha1hash);
}
使用SHA1
方法,讓您的SHA1字符串。我還沒有確認這確實是一個sha1,但它適用於我的應用程序。
太棒了!人。謝謝! – Ferdinand 2011-04-22 15:39:39
你的縮進看起來有點不一致,所以我更加一致。如果你不喜歡它,只需回滾。 :) – alternative 2011-04-22 15:42:05
還要記住,byte []是一個更緊湊的格式,然後是一個十六進制字符串,因此在將數據呈現給用戶之前,它可能更有效地將其存儲爲字節[],在這種情況下,用戶期望十六進制。 – alternative 2011-04-22 15:43:22
binnyb's convertToHex
方法無法正常工作。更正確的一個,對我的工作原理是:
private static String convertToHex(byte[] data) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < data.length; i++) {
int halfbyte = (data[i] >>> 4) & 0x0F;
int two_halfs = 0;
do {
if ((0 <= halfbyte) && (halfbyte <= 9)) {
buf.append((char) ('0' + halfbyte));
}
else {
buf.append((char) ('a' + (halfbyte - 10)));
}
halfbyte = data[i] & 0x0F;
} while(two_halfs++ < 1);
}
return buf.toString();
}
public static String SHA1(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] sha1hash = new byte[40];
md.update(text.getBytes("iso-8859-1"), 0, text.length());
sha1hash = md.digest();
return convertToHex(sha1hash);
}
使用SHA1
方法,讓您的SHA1字符串。
更新:提供一個完整的答案
你簡直太棒了 – Jigar 2015-04-07 04:42:41
binnyb設置我在正確的軌道上,但是我發現更多一些,更容易理解代碼在這裏: http://www.coderanch.com/t/526487/java/java/Java-Byte-Hex-String
private static String convertToHex(byte[] data) {
StringBuilder sb = new StringBuilder(data.length * 2);
Formatter fmt = new Formatter(sb);
for (byte b : data) {
fmt.format("%02x", b);
}
return sb.toString();
}
我以前回答過這個( How to SHA1 hash a string in Android?),但它也適用於此:
Android自帶Apache的Commons Codec,因此您可以簡單地使用以下行創建一個SHA-1格式的字符串:
String myHexHash = DigestUtils.shaHex(myFancyInput);
這是您默認使用Android 4的舊的棄用方法。新版本的DigestUtils帶來了所有shaHex()方法的風格,如sha256Hex(),並且還用不同的參數類型重載了方法。
當然,DigestUtils和Commons Codec的其餘部分還有更多的功能。看一看。
編輯:
如果你得到一個ClassNotFoundError你必須明確地添加公地編解碼器的依賴性(即使它應該有Android作爲傳遞依賴),在Maven的如:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.7</version>
</dependency>
而且也,你將不得不調用更改爲:
String myHexHash = new String(Hex.encodeHex(DigestUtils.sha512(myFancyInput)));
(我的簡單猜測是,這可能是由於Android VM中的ClassLoader問題(類名衝突) - 這實際上證明了commons-codec類已經存在......)
- 1. SHA1 PHP加密與SHA1 Python加密
- 2. Android上進行加密RSA InvalidKeyException將
- 3. 加密密碼sha1 keySpring?
- 4. SHA1密碼加密錯誤
- 5. Sha1或密碼加密
- 6. 檢索sha1加密密碼..
- 7. SHA1加密和SHA1到十六進制php
- 8. Ios swift SHA1加密
- 9. 使用SHA1加密
- 10. SHA1加密問題
- 11. 使用SHA1算法對用戶憑證進行加密
- 12. OAuth:我是否需要通過HTTPS對HMAC-SHA1進行加密
- 13. 使用SHA1在Sql Server 2008上加密密碼
- 14. 使用SHA1在C#和IOS中加密
- 15. 在wordpress上導入/使用SHA1密碼
- 16. 在Android中使用AESCrypt進行加密和解密
- 17. RSA:在iOS中進行加密,在Java中進行解密
- 18. 在Android設備上加密
- 19. 使用CryptoJS進行上傳和加密
- 20. SHA1在VB.Net中的解密
- 21. AES加密 - 在Android上存儲密碼
- 22. 如何使用SHA1對密碼文件進行散列處理
- 23. Android上的加密
- 24. 如何在Java中解密sha1加密的字符串
- 25. 加密到SHA1 visual basic - VB 2010
- 26. 使用SHA1散列加密NSString
- 27. 鹽和SHA1加密登記表
- 28. 我可以在Android中使用AWS KMS加密進行客戶端加密嗎?
- 29. 在android上加密GSM語音android
- 30. 保護主密碼進行加密Android中
SHA1不是加密算法,它是散列算法。一旦你散佈了你的消息,就不可能「消散」它。就這樣你知道。更多信息在這裏:http://en.wikipedia.org/wiki/Hash_algorithm。 – Darhuuk 2011-04-22 15:37:25
恕我直言,這是不夠的簡單散列一次字符串。考慮用隨機種子醃製字符串,並「遞歸」地將鹽醃的字符串散列至少1000次。您將需要存儲隨機種子。 – JAL 2011-04-22 19:40:23
更簡單的SHA-1方法:(根據評論者的建議更新,也使用更高效的字節 - >字符串算法)請參閱此鏈接http://stackoverflow.com/questions/5980658/how-to-sha1-hash- a-string-in-android – 2015-06-03 06:45:20