मैं sha256
जावा में कुछ स्ट्रिंग कैसे कर सकता हूं ? क्या किसी को इसके लिए किसी भी मुफ्त पुस्तकालय का पता है?
मैं sha256
जावा में कुछ स्ट्रिंग कैसे कर सकता हूं ? क्या किसी को इसके लिए किसी भी मुफ्त पुस्तकालय का पता है?
जवाबों:
SHA-256 एक "एन्कोडिंग" नहीं है - यह एक तरफ़ा हैश है।
आप मूल रूप से स्ट्रिंग को बाइट्स में परिवर्तित करेंगे (उदाहरण के लिए text.getBytes(StandardCharsets.UTF_8)
) और फिर बाइट को हैश में। ध्यान दें कि हैश का परिणाम भी मनमाना द्विआधारी डेटा होगा, और यदि आप एक स्ट्रिंग में यह प्रतिनिधित्व करना चाहते हैं, तो आपको बेस 64 या हेक्स का उपयोग करना चाहिए ... कंस्ट्रक्टर का उपयोग करने का प्रयास न करें String(byte[], String)
।
जैसे
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
"UTF-8"
: एक चिंता के बारे में कम किए गए अपवाद की जाँच की।
मुझे लगता है कि Apache Common Codec का उपयोग करना सबसे आसान उपाय है :
String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(stringText);
एक और स्ट्रिंग के रूप में स्ट्रिंग के लिए पूर्ण उदाहरण हैश।
public static String sha256(String base) {
try{
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(base.getBytes("UTF-8"));
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if(hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch(Exception ex){
throw new RuntimeException(ex);
}
}
यदि आप जावा 8 का उपयोग कर रहे हैं तो आप कर सकते byte[]
हैं
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
String encoded = Base64.getEncoder().encodeToString(hash);
import java.security.MessageDigest;
public class CodeSnippets {
public static String getSha256(String value) {
try{
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(value.getBytes());
return bytesToHex(md.digest());
} catch(Exception ex){
throw new RuntimeException(ex);
}
}
private static String bytesToHex(byte[] bytes) {
StringBuffer result = new StringBuffer();
for (byte b : bytes) result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
return result.toString();
}
}
0xff
? यह कुछ भी नहीं करता है, यह करता है?
String hashWith256(String textToHash) {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] byteOfTextToHash = textToHash.getBytes(StandardCharsets.UTF_8);
byte[] hashedByetArray = digest.digest(byteOfTextToHash);
String encoded = Base64.getEncoder().encodeToString(hashedByetArray);
return encoded;
}
यह मेरा दृष्टिकोण कोटलिन का उपयोग था:
private fun getHashFromEmailString(email : String) : String{
val charset = Charsets.UTF_8
val byteArray = email.toByteArray(charset)
val digest = MessageDigest.getInstance("SHA-256")
val hash = digest.digest(byteArray)
return hash.fold("", { str, it -> str + "%02x".format(it)})
}
[B@188363e
एन्क्रिप्टेड पासवर्ड नहीं। साथ ही, ऐसा लगता है कि हर बार यह फ़ंक्शन कहा जाता है।
return hash.fold("", { str, it -> str + "%02x".format(it)})
कि कौन एन्क्रिप्टेड पासवर्ड लौटाता है न कि ऑब्जेक्ट।
यहाँ पाचन को हेक्स स्ट्रिंग में बदलने के लिए थोड़ा और बेहतर तरीका है:
private static final char[] hexArray = "0123456789abcdef".toCharArray();
public static String getSHA256(String data) {
StringBuilder sb = new StringBuilder();
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(data.getBytes());
byte[] byteData = md.digest();
sb.append(bytesToHex(byteData);
} catch(Exception e) {
e.printStackTrace();
}
return sb.toString();
}
private static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return String.valueOf(hexChars);
}
क्या किसी को जावा में तेज़ तरीके का पता है?
आप निम्न तरीके से MessageDigest का उपयोग कर सकते हैं:
public static String getSHA256(String data){
StringBuffer sb = new StringBuffer();
try{
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(data.getBytes());
byte byteData[] = md.digest();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
} catch(Exception e){
e.printStackTrace();
}
return sb.toString();
}
जावा 8 में
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
import javax.xml.bind.DatatypeConverter;
Scanner scanner = new Scanner(System.in);
String password = scanner.nextLine();
scanner.close();
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] hash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
String encoded = DatatypeConverter.printHexBinary(hash);
System.out.println(encoded.toLowerCase());
Java में, MessageDigest वर्ग का उपयोग क्रिप्टोग्राफ़िक हैशिंग मूल्य की गणना करने के लिए किया जाता है। यह वर्ग क्रिप्टोग्राफिक हैश फ़ंक्शन ( MD5 , SHA-1 और SHA-256 प्रदान करता है पाठ के हैश मान को खोजने के लिए ) प्रदान करता है।
SHA-256 एल्गोरिथ्म का उपयोग करने के लिए कोड उदाहरण।
public void printHash(String str) throws NoSuchAlgorithmException {
MessageDigest md=MessageDigest.getInstance("SHA-256");
byte[] sha256=md.digest(str.getBytes(StandardCharsets.UTF_8));
for(byte b : sha256){
System.out.printf("%02x",b);
}
}
यह मैं हैशिंग के लिए इस्तेमाल किया गया है:
String pass = "password";
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte hashBytes[] = messageDigest.digest(pass.getBytes(StandardCharsets.UTF_8));
BigInteger noHash = new BigInteger(1, hashBytes);
String hashStr = noHash.toString(16);
आउटपुट: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
private static String getMessageDigest(String message, String algorithm) {
MessageDigest digest;
try {
digest = MessageDigest.getInstance(algorithm);
byte data[] = digest.digest(message.getBytes("UTF-8"));
return convertByteArrayToHexString(data);
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
आप नीचे दिए गए विभिन्न एल्गोरिदम के साथ उपरोक्त विधि को कॉल कर सकते हैं।
getMessageDigest(message, "MD5");
getMessageDigest(message, "SHA-256");
getMessageDigest(message, "SHA-1");
आप पूर्ण आवेदन के लिए इस लिंक का उल्लेख कर सकते हैं ।