[英]Storing a byte array in MS-SQL
我從ms sql數據庫還原字節數組時遇到問題,有人可以幫助我嗎?
我有一個名為sec的表的數據庫,該表具有兩個屬性'ID_uzivatele'-varchar(20)和' salt' -varbinary(50) 。 我想在此表中存儲一個byte[] salt
,然后將其還原回byte[] receivedSalt
,但是如果我比較兩個字節數組,它就不相等:
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class test {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:JavaProject");
byte[] salt = generateSalt();
PreparedStatement insert = conn.prepareStatement("INSERT INTO sec VALUES ('id001', ?)");
insert.setBytes(1, salt);
insert.executeUpdate();
insert.close();
System.out.println("values are succesfully inserted to database");
Statement select = conn.createStatement();
ResultSet rs = select.executeQuery("SELECT salt FROM sec WHERE ID_uzivatele = 'id001'");
rs = select.getResultSet();
try {
while (rs.next()) {
byte[] receivedSalt = rs.getBytes("salt");
if (salt.equals(receivedSalt)) System.out.println("match");
else System.out.println("no match");
}
}
finally {
rs.close();
select.close();
}
} catch (ClassNotFoundException | SQLException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
public static byte[] generateSalt() throws NoSuchAlgorithmException {
// VERY important to use SecureRandom instead of just Random
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
// Generate a 8 byte (64 bit) salt as recommended by RSA PKCS5
byte[] salt = new byte[8];
random.nextBytes(salt);
return salt;
}
}
好的,我明白了,我使用了錯誤的比較方法:
if (salt.equals(receivedSalt)) System.out.println("match");
因此它適用於此:
if (Arrays.equals(salt, receivedSalt)) System.out.println("match");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.