SHA-1 加密后无法在Oracle中保存的问题
我使用的oracle9i数据库,字符集为UTF8
使用下面方法对密码进行加密:
static public String encryptSHA(String strMessage)
{
if (strMessage == null)
return null;
try
{
byte[] plainText = strMessage.getBytes("UTF8");
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
messageDigest.update(plainText);
return new String(messageDigest.digest(), "UTF8");
}
catch (Exception e)
{
e.printStackTrace();
return strMessage;
}
}
在一些少数情况下产生的密文保存到数据库时报数库时报错:
例如密码为 “jjjjjjjjjjjjjjjj” 时错误信息如下:
java.sql.SQLException: ORA-06550: 第 1 行, 第 69 列:
PLS-00103: 出现符号 "???"在需要下列之一时:
( - +
case mod new not null others <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
execute forall merge time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
这种情况有办法处理吗?
如果我的数据库字符集为oracle默认字符集时,加密码方法应该如何修改?
问题点数:100、回复次数:1Top
1 楼pigo()回复于 2005-06-06 14:18:10 得分 100
Hash出来的byte数组,使必须再进行hextoString或者base64处理的。
然后返回的字符串时全部由ASCII码组成的,这样才不会出任何问题。
//以下代码仅仅示例,你自己去寻找 base64的class吧。
return base64.encode(messageDigest.digest());
Top




