如果这不是很明显,我首先要说的是我不是加密货币人士。
我的任务是在 Python 2.7 中复制 Java 的 PBEWithMD5AndDES(具有 DES 加密的 MD5 摘要)的行为。
我确实可以访问 Python 的加密工具包 PyCrypto。
下面是我试图复制其行为的 Java 代码:
import java.security.spec.KeySpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.spec.PBEParameterSpec;
import javax.crypto.Cipher;
import javax.xml.bind.DatatypeConverter;
public class EncryptInJava
{
public static void main(String[] args)
{
String encryptionPassword = "q1w2e3r4t5y6";
byte[] salt = { -128, 64, -32, 16, -8, 4, -2, 1 };
int iterations = 50;
try
{
KeySpec keySpec = new PBEKeySpec(encryptionPassword.toCharArray(), salt, iterations);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
AlgorithmParameterSpec …Run Code Online (Sandbox Code Playgroud) 我正在做一个例子来帮助我学习如何在Python中使用第一类函数.总的来说,我对我提出的解决方案感到满意,除了一行代码尖叫"非Pythonic"给我.
所以我在这里定义了我正在使用的问题.这个难题寻求六个简单函数的单个排列(720个可能),其中涉及"2"最终返回-3.
这是我的解决方案,它简单地转储每个可能的六功能排列及其结果.
def perform (fun, arg):
return fun(arg)
def a(n):
return n + 2
def d(n):
return n / 2.
def m(n):
return n * 2
def p(n):
return n ** 2
def r(n):
return n ** 0.5
def s(n):
return n - 2
if __name__ == "__main__":
from itertools import permutations
for i, perm in enumerate(permutations([a, d, m, p, r, s])):
try:
k = perform(perm[5], perform(perm[4], perform(perm[3], perform(perm[2], perform(perm[1], perform(perm[0], 0))))))
except ValueError:
k …Run Code Online (Sandbox Code Playgroud)