package com.aperture_software.glados_wiki.support; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.shiro.crypto.RandomNumberGenerator; import org.apache.shiro.crypto.SecureRandomNumberGenerator; import org.apache.shiro.crypto.hash.Sha256Hash; import org.apache.shiro.util.ByteSource; import org.springframework.stereotype.Component; import java.util.List; import java.util.Vector; /** * Created by jhyun on 13. 12. 24. */ @Component public class Sha256 { public static final int HASH_ITERATION = 1024; private List<Byte> toBytes(final ByteSource byteSource) { Vector<Byte> v = new Vector<Byte>(); for (byte b : byteSource.getBytes()) { v.add(b); } return v; } public Pair<List<Byte>, String> getSaltAndHash(final String plainTextPassword) { RandomNumberGenerator rng = new SecureRandomNumberGenerator(); final ByteSource salt = rng.nextBytes(); final String hashedPasswordBase64 = new Sha256Hash(plainTextPassword, salt, HASH_ITERATION).toBase64(); return new ImmutablePair<List<Byte>, String>(toBytes(salt), hashedPasswordBase64); } }