我试图通过Java代码(Hibernate)从MySQL DB获得MD5加密传递.但我不能得到String或任何合理的Java类型.
我唯一得到的是这个无用的消息: java.lang.ClassCastException:[B不能转换为com.mysql.jdbc.Blob(或者我尝试转换的任何Java类型).
这是我的方法:
public void testCrypto() {
session.beginTransaction();
// creates native SQL query
// uses native MySQL's MD5 crypto
final Blob pass = (Blob) session.createSQLQuery("SELECT MD5('somePass')")
.list().get(0);
session.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
这是完整的堆栈跟踪:
java.lang.ClassCastException: [B cannot be cast to com.mysql.jdbc.Blob
at domain.DatabaseTest.testCrypto(DatabaseTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) …Run Code Online (Sandbox Code Playgroud) 我需要一个PHP函数,AES256_encode($dataToEcrypt)加密$data到AES-256,另一个AES256_decode($encryptedData)反过来.有谁知道这个函数应该有什么代码?
为什么你不能像你可以反转数学函数那样反转算法呢?如何制作一个不可逆的算法?
如果你使用彩虹桌,是什么让使用盐不可能破解它?如果你用蛮力制作彩虹表来生成它,那么它就会发明每个明文值(到一个长度),最终会包含每个可能密码的盐和每个可能的盐(盐和密码/文本会只是作为单个文本聚集在一起).
我已经尝试了几天在我的Windows机器上安装bcrypt而没有运气.其中一个依赖项(Windows 7 SDK)不希望安装,即使我已尝试过网络上的许多建议,它只是拒绝合作.
我需要一个很好的替代bcrypt,它没有任何依赖.
在密码学等方面,我是一个全新的人.我不(也不想)知道SHA256和RSA的细节.我"知道"他们做了什么,而不是他们是怎么做的,现在这已经足够了.
我想知道什么是"SHA256withRSA"算法(如果你可以称之为),实际上是以什么顺序进行的.例如,它是否使用SHA256对数据进行哈希处理,然后使用RSA对其进行加密,反之亦然,还是其他什么?
我问的原因是因为我想做java相当于:
Signature.getInstance("SHA256withRSA")
signature.initSign(privateKey); //privateKey == a key extracted from a .p12 file
Run Code Online (Sandbox Code Playgroud)
在iOS上的Objective-C中.而我似乎无法找到任何完全符合这一要求的东西,因此我问,我可以只散列数据(SHA256)然后加密它(RSA)(反之亦然)并获得相同的行为吗?
做这种事情的建议解决方案是什么?
谢谢!
编辑:我没有提到我使用通过执行以下操作获得的私钥来签署数据:
KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(new FileInputStream(new File(filename)), password.toCharArray());
PrivateKey privateKey = (PrivateKey)keystore.getKey(alias, password.toCharArray());
Run Code Online (Sandbox Code Playgroud)
其中filename是例如:"/ somewhere/mykey.p12".
我有这个PHP代码:
$password = sha256($_POST['password']);
Run Code Online (Sandbox Code Playgroud)
但是当我运行这段代码时,它说:
Fatal error: Call to undefined function sha256() in .... on line ...ix it as
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题,我必须做些什么才能解决这个问题,因为我知道sha256存在.
我也尝试过:
$password = sha256(trim($_POST['password']));
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.
如果我有一个32个字符的字符串(MD5哈希)并使用Base64对其进行编码,那么编码字符串的最大长度是多少?
我正在使用Devise重新编写Rails中的网站进行身份验证.以前的网站使用具有md5密码的用户数据库,因此我想将此密码迁移到Devise使用的加密.我该如何解决?
我很难完全理解加密的工作原理和编码方式,尤其是python.我只是试图了解基础并以最简单的形式创建代码.
我将在两个不同的站点之间传递userID,但显然我需要使用私钥加密,因此Website2知道它来自Website1.这似乎是我的代码:http: //docs.python.org/library/hashlib.html#module-hashlib,但它没有很好的例子(或者我可能在错误的位置).
我遇到的问题是完全理解如何编码和解码.
那么让我们说每个网站都知道的共享私钥是:
shared_private_key = "ABCDEF"
Run Code Online (Sandbox Code Playgroud)
我希望Website1将以下用户ID传递给Website2:
userID = "123456"
Run Code Online (Sandbox Code Playgroud)
Website1如何使用私钥加密我的userID,加密可以通过HTTP头发送,然后让Website2解密并能够使用共享私钥读取userID?
我为提出这样一个基本问题而道歉,但我没有意识到应该怎么做.谢谢.