내가 작업하고있는 응용 프로그램은 String이 SHA-256 해시로 변환되어야하지만 J2ME 이후로는 MessageDigest 전체 기능에 액세스 할 수 없기 때문에문자열을 J2ME에서 SHA-256 해시로 변환하는 방법은 무엇입니까?
BouncyCastle 라이브러리를 사용해 보았습니다.하지만 결과 페이지를 온라인 결과와 비교할 때 값이 다릅니다.
해시가 제대로 작성되지 않았다는 것을 알 수있는 또 다른 방법은 HTTP 요청에서 내 서버로 전송하는 것입니다. 그러면 로그인 할 수 있으면 해시가 올바르게 생성되고 그렇지 않으면 조작 된 것입니다.
나는 내 자신의 SHA-256 enconding을 구현해야한다고 들었다. 그러나 지금까지는 예제 나 알고리즘 자체를 찾지 못했고, Wikipedia page의 의사 코드 만이 나왔고 더 나에게는 암호화 경험이 없다. 모든.
나만의 구현을 만들어야합니까? 아니면 여전히 이것을 피하고 다른 라이브러리를 사용할 기회가 있습니까?
String[] stringArray = (String[]) dotREZApi.getCurrentRequest().getResponseHeaders().get("X-Session-Id");
String tmpSessionId = stringArray[0];
byte[] input = null;
try {
input = new String("X-Session-Sig" + tmpSessionId + "test").getBytes("UTF-8"); // String that will be converted
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("Unsupported encoding exception");
e.printStackTrace();
}
// trying to create a key, i don't know if this is right I just did this because I needed a key
byte[] key = new byte[4];
int tmpInt = new Random().nextInt();
key[0] = (byte)(tmpInt >> 24);
key[1] = (byte)(tmpInt >> 16);
key[2] = (byte)(tmpInt >> 8);
key[3] = (byte)(tmpInt);
Digest digest = new SHA256Digest();
HMac hmac = new HMac(digest);
hmac.init(new KeyParameter(key)); // maybe this is the problem? the documentaiton never states where do I get this key or how to generate it
hmac.update(input, 0, input.length);
byte[] output = new byte[digest.getDigestSize()];
hmac.doFinal(output, 0);
dotREZApi.setSessionSig(new String(Hex.encode(output)));
나는 내가이 site에서 얻는 사람에 비해이에서 얻을 결과,하지만 난하지 않는 경기 :
는 여기에 내가 BouncyCastle과 시도 코드의 현재 작품이다.
라인 input = new String("X-Session-Sig" + tmpSessionId + "test").getBytes("UTF-8");
은 문자열을 구성한 다음이를 바이트 []로 변환하여 SHA-256 해시로 변환합니다. 여기서 tmpSessionId는 HTTP 요청에서 가져온 값입니다. 결과 해시는 이후 요청에서 전송됩니다.
당신은 BouncyCastle을 의미합니다. 어떻게 그 끈을 해싱하니? 몇 가지 코드를 보여줄 수 있습니까? SHA-256을 다시 구현할 필요는 없습니다. –
내 편집 된 답변을 확인하고, 몇 가지 코드를 넣었지만 정직하게 말하면 올바른 결과를 얻을 수 없었기 때문에 탄력성을 포기할 것입니다. 내 구현 권한이 있습니까? –
내 문제는 키 생성에있는 것 같지만이 키가 무엇인지 또는 키를 생성하는 방법을 설명하는 설명서를 찾지 못했습니다. 난 무작위 키를 만드는 일반적인 방법을 발견하고 그게 내가 사용하는거야. –